自己写的老鼠走迷宫算法出现错误,求教
本帖最后由 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;
}