首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

自己写的老鼠走迷宫算法出现异常,求教

2013-09-09 
自己写的老鼠走迷宫算法出现错误,求教本帖最后由 laozhude123 于 2013-09-06 12:33:58 编辑/**老鼠走迷宫*

自己写的老鼠走迷宫算法出现错误,求教
本帖最后由 laozhude123 于 2013-09-06 12:33:58 编辑

/*
*老鼠走迷宫
*在二维阵列中使用2表示迷宫墙壁,使用4来表示老鼠的行走过的路径,使用3表示老鼠正确的行走路径
*/
#include <iostream.h>

int line[7][7]={//二维迷宫矩阵,使用2表示迷宫墙壁,使用0表示可以行走路径
    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, 0,
2, 2, 2, 2, 2, 2, 2
};
int (*p)[7]= line;

void turnback(int n,int m);//回退,n表示二维数组中的n行,m表示二维数组中的m列

void left(int n,int m);//向左走

void down(int n,int m);//向后走

void right(int n,int m);//向右走

int  visit(int n,int m);//方法包含turnback,left,down,right

void left(int n,int m){
    if(*(*(p+n)+m-1)==2||*(*(p+n)+m-1)==3||*(*(p+n)+m-1)==4)

turnback(n,m);
else{

*(*(p+n)+m)=3;

left(n,m-1);
}
}
void down(int n,int m){

if(*(*(p+n+1)+m)==2||*(*(p+n+1)+m)==3||*(*(p+n+1)+m)==4)

left(n,m);

else{
*(*(p+n)+m)=3;

down(n+1,m);
}
}

void right(int n,int m){

if(*(*(p+n)+m+1)==2||*(*(p+n)+m+1)==3||*(*(p+n)+m+1)==4){

down(n,m);
}
else{

*(*(p+n)+m)=3;

right(n,m+1);
}


}

void  turnback(int n,int m){
if(m!=6){

if(*(*(p+n)+m+1)==0||*(*(p+n+1)+m)==0||*(*(p+n)+m-1)==0){

visit(n,m);
}
else{

*(*(p+n)+m)=4;

if(*(*(p+n)+m-1)==3){

visit(n,m-1);

}
if(*(*(p+n-1)+m)==3){

visit(n-1,m);
}
if(*(*(p+n)+m+1)==3){

visit(n,m+1);
}

}

}

}
int    visit(int n,int m){



right( n, m);

down( n, m);

left( n, m);

turnback( n, m);


return 0; 
}






int main(){


cout<<"显示迷宫:"<<endl;

for(int i=0;i<7;i++){//画出迷宫

for(int j=0;j<7;j++){

if(line[i][j]==2)

cout<<"1";
else
cout<<"  "; 


}
cout<<endl;
}

visit(1,0);
for(int n=0;n<7;n++){//显示走的路径

for(int m=0;m<7;m++){

cout<<line[n][m];
}
cout<<endl;
}

return 0;
}



这是我自己写的一个老鼠走迷宫的程序,我在调试的过程中当n=5,m=6时就是找到出口时,就莫名其妙的跳到left方法中了,程序执行就莫名其妙了。按理说当m=6时,turnback方法无法执行,应该是visit方法直接return了,就可以执行main方法中的以后代码了,可执行效果不是这样,这是为什么 
[解决办法]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出

热点排行