C语言老鼠走迷宫问题

intvisit(int,int);intmaze[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,... 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 startI = 1, startJ = 1; // 入口
int endI = 5, endJ = 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(startI, startJ) == 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 == endI && j == endJ)
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;
}
maze[i][j] = 1;是把访问过的设置为1,maze[i][j] = 0;又是什么意思。 求大神讲解下整个代码
展开
 我来答
me1171115772
推荐于2016-03-25 · 超过21用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:36.3万
展开全部
从程序上来看 也就是说在调用这个visit函数时,如果maze[i][j]这个点的上下左右都不是0的话 也就是进入了死胡同 那么就把这个点置为0。

你可以把这个程序这样子改一下,
if(visit(startI, startJ) == 0)
{
printf("\n没有找到出口!\n");
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(" ");
}

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");
这样对你调试程序和理解程序都有帮助,希望对你有用。
更多追问追答
追问
死胡同,然后呢,递归如何理解
追答
死胡同不就显示没有找到出口么???
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式