程式問題遞回的

shihyuyao 2005-02-21 05:53:31
#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???


抱歉我表達能力不太好不知道您能不能看懂我說的意思~~@@

謝謝

...全文
44 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuelong_zl 2005-02-21
  • 打赏
  • 举报
回复
呵呵,等你上MSN以后再说吧,你的输入法在这里很不合适!!

如果你认真看了的话,简单说一说你就可以明白了.

放心不会很难懂的

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧