#include NO_CML FILE *fTree, *fOut; #define BOOL int #define TRUE 1 #define FALSE 0 #define MAXPNT 100 int iTree[351][6]; BOOL IsExit(a) int a; { static unsigned uWave[351]; static int iPoint[MAXPNT][2], iPntrs, iSlot, iNSlot; register i, j, k; unsigned uNumb; int b; uNumb = 1; iSlot = 0; iNSlot = 1; for(i = 0; i < 351; i ++) uWave[i] = 0; fprintf(fOut, "Return at %d **** :\n", a); for (iPntrs = 1, iPoint[0][0] = a; ;) { for (i = j = 0; i < iPntrs; i++) { b = iPoint[i][iSlot]; for (k = 0; (k < 6) && ((a = iTree[b][k]) > 0); k++) { if (a == 338) { fprintf(fOut, "We have finished at least [%d]\n", uNumb); return TRUE; } if (uWave[a] != 0) continue; iPoint[j][iNSlot] = a; if (j ++ >= MAXPNT-2) { fprintf(fOut, "Fatal error : Out of boundary\n"); fclose(fOut); exit(1); } uWave[a] = uNumb; } } if ((iPntrs = j) == 0) return FALSE; uNumb ++; iSlot = iSlot+1 % 2; iNSlot = iNSlot+1 % 2; } } void main() { static int iPoint[MAXPNT][2], iPntrs, iSlot, iNSlot; static unsigned uWave[351], uGNumb = 1; register i, j, k; int a,b; fOut = fopen("a.out","w"); if (!(fTree = fopen("rat.tre","rb"))) { fprintf(fOut, "Cannot Open Tree File\n"); exit(1); } fread(iTree, sizeof(int), 351*6, fTree); fclose(fTree); for (i = 0; i < 351; i++) uWave[i] = 0; iSlot = 0; iNSlot = 1; iPntrs = 1; iPoint[0][iSlot] = 0; for ( ; ; ) { fprintf(fOut, "#%5d\n", uGNumb); for (i = j = 0; i < iPntrs; i++) { fprintf(fOut, " %d: %d:\n ", i, b = iPoint[i][iSlot]); for (k = 0; (k < 6) && ((a = iTree[b][k]) > 0); k++) { fprintf(fOut, "%d[%d], ", a, uWave[a]); if (a == 338) { fprintf(fOut, "\nWe have finished [%d]\n", uGNumb); continue; } if (uWave[a] != 0) if (IsExit(a)) continue; else { fprintf(fOut, "\nThere is no exit from %d Item\n", a); fclose(fOut); exit(1); } iPoint[j][iNSlot] = a; if (j ++ >= MAXPNT-2) { fprintf(fOut, "\nFatal error : Out of boundary\n"); fclose(fOut); exit(1); } uWave[a] = uGNumb; } fprintf(fOut, "\n"); } if ((iPntrs = j) == 0) { fprintf(fOut, "\nNo more pointers here\n"); break; } uGNumb ++; iSlot = iSlot+1 % 2; iNSlot = iNSlot+1 % 2; } fprintf(fOut, "-----------------\n"); for (i = 0; i < 35; i ++) { fprintf(fOut, "%3d: ", i*10+1); for (j = 0; j < 10; j ++) fprintf(fOut, "%7d", uWave[i*10+j+1]); fprintf(fOut, "\n"); } fprintf(fOut, "-----------------\n"); for (i = 0; i < 351; i ++) if (uWave[i] == 0) { fprintf(fOut, "Unusable Item %d\n", i); if (!IsExit(i)) fprintf(fOut, "And there is no exit from here\n"); } fclose(fOut); }