程式問題遞回的
#include <stdio.h>
#include <stdlib.h>
int visit(int, int);
int maze[7][7] = {{2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 2, 0, 2, 2},
{2, 2, 0, 2, 0, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2}};
int si = 1, sj = 1; // 入口
int ei = 5, ej = 5; // 出口
int success = 0;
int main(void) {
int i, j;
printf("顯示迷宮:\n");
for(i = 0; i < 7; i++) {
for(j = 0; j < 7; j++)
if(maze[i][j] == 2)
printf("▓");
else
printf(" ");
printf("\n");
}
if(visit(si, sj) == 0)
printf("\n沒有找到出口!\n");
else {
printf("\n顯示路徑:\n");
for(i = 0; i < 7; i++) {
for(j = 0; j < 7; j++) {
if(maze[i][j] == 2)
printf("▓");
else if(maze[i][j] == 1)
printf("◇");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
int visit(int i, int j) {
maze[i][j] = 1;
if(i == ei && j == ej)
success = 1;
if(success != 1 && maze[i][j+1] == 0) visit(i, j+1);
if(success != 1 && maze[i+1][j] == 0) visit(i+1, j);
if(success != 1 && maze[i][j-1] == 0) visit(i, j-1);
if(success != 1 && maze[i-1][j] == 0) visit(i-1, j);
if(success != 1)
maze[i][j] = 0;
return success;
}
_________________________________________________________________________________________
抱歉我看了很久我還是沒辦法看懂這幾段下面是我看懂得部分註解
int visit(int i, int j) {
maze[i][j] = 1; //這是老鼠走的路徑
if(i == ei && j == ej) //判斷有沒有走到出口有就success = 1 在return回去
success = 1;
if(success != 1 && maze[i][j+1] == 0) visit(i, j+1); //這邊是向左找
if(success != 1 && maze[i+1][j] == 0) visit(i+1, j); //向下
if(success != 1 && maze[i][j-1] == 0) visit(i, j-1); //向左
if(success != 1 && maze[i-1][j] == 0) visit(i-1, j); //向上
if(success != 1)
maze[i][j] = 0; //這邊有點搞不清楚這是走過路徑但是死路要設回0嗎???
return success;
}
{2, 2, 2, 2, 2, 2, 2}
{2, 0, 0, 0, 0, 0, 2}
{2, 0, 2, 0, 2, 0, 2}
{2, 0, 0, 2, 0, 2, 2}
{2, 2, 0, 2, 0, 2, 2}
{2, 0, 0, 0, 0, 0, 2}
{2, 2, 2, 2, 2, 2, 2}
還有我搞不太懂這邊遞回是怎麼執行.....開始是傳入 i=1 , j=1 把maze[i][j]=1入口設成1....之後 if(success != 1 && maze[i][j+1] == 0) visit(i, j+1); //這邊的maze [i][j]是等於maze[1][2]這位置嗎??
再來visit(i , j+1) 到底是變成 visit (1,2 )還是 visit( 1 ,3 ) 應該是 visit( 1 ,3 ) 不過這樣我又搞不懂 maze[i][j] = 1; 這邊不是又把 maze [1][3]=1那下面的if條件要怎麼判斷???
最後死路的路徑是怎樣設回0???
抱歉我表達能力不太好不知道您能不能看懂我說的意思~~@@
謝謝