int visit2(int i, int j, int s){ int x; int k; //訪れたところにしるしをつける maze2_m[i][j] = 1; //とりあえずスタックに入れる maze2_ri[maze2_sp] = i; maze2_rj[maze2_sp] = j; maze2_sp++; for(x = 0; x < s; x++) printf(" "); printf("in (%d, %d) \n", i, j); if(i == maze2_Ei && j == maze2_Ej){ //ここにきているときはスタックが正しい for(k = 0; k < maze2_sp; k++) printf("(%d, %d) ", maze2_ri[k], maze2_rj[k]); printf("\n"); maze2_success = 1; } if(maze2_success != 1 && maze2_m[i][j + 1] == 0) visit2(i, j + 1, s + 1); if(maze2_success != 1 && maze2_m[i + 1][j] == 0) visit2(i + 1, j, s + 1); if(maze2_success != 1 && maze2_m[i][j - 1] == 0) visit2(i, j - 1, s + 1); if(maze2_success != 1 && maze2_m[i - 1][j] == 0) visit2(i - 1, j, s + 1); for(x = 0; x < s; x++) printf(" "); printf("out (%d, %d) \n", i, j); //ここにいるということは失敗なのでスタックから出す maze2_sp--; return maze2_success; }
void visit2(int i, int j) { int m, n; maze2[i][j] = 1; if(i == endI2 && j == endJ2) { printf("\n 显示路径 : \n"); for(m = 0; m < 9; m++) { for(n = 0; n < 9; n++) if(maze2[m][n] == 2) printf("█"); else if(maze2[m][n] == 1) printf("◇"); else printf(" "); printf("\n"); } } if(maze2[i][j+1] == 0) visit2(i, j+1); if(maze2[i+1][j] == 0) visit2(i+1, j); if(maze2[i][j-1] == 0) visit2(i, j-1); if(maze2[i-1][j] == 0) visit2(i-1, j); maze2[i][j] = 0; }
void maze2(){ //スタックのポインタ maze2_sp = 0; maze2_success = 0; maze2_Si = 1; maze2_Sj = 1; maze2_Ei = 5; maze2_Ej = 5; printf("\n 迷路の探索 \n"); if(visit2(maze2_Si, maze2_Sj, 0) == 0){ printf("出口は見つかりませんでした \n"); } printf("\n"); }
int mousemaze2(void) { int i, j; printf(" 显示迷宫 : \n"); for(i = 0; i < 7; i++) { for(j = 0; j < 7; j++) if(maze2[i][j] == 2) printf("█"); else printf(" "); printf("\n"); } visit2(startI2, startJ2); return 0; }