structoffset//方向结构体,a代表x的偏移量,b代表y的偏移量{int a, b;char*dir;};constint m =12, p =15;int Maze[m +2][p +2]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1},{1,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1},{1,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,1},{1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1},{1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1},{1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1},{1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1},{1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1},{1,0,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1},{1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1},{1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1},{1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};int Mark[m +2][p +2]={0};
offset Move[8]={{-1,0,"N"},{-1,1,"NE"},{0,1,"E"},{1,1,"SE"},{1,0,"S"},{1,-1,"SW"},{0,-1,"W"},{-1,-1,"NW"}};intSeekPath(int x,int y){//从迷宫的某一位置[i][j]开始,寻找通向出口[m][p]的一条路径,如果能找到,就返回1int i, g, h;char*d;if(x == m && y == p){//找到出口return1;}for(i =0; i <8;++i){//8个方向试探
g = x + Move[i].a;
h = y + Move[i].b;
d = Move[i].dir;if(Maze[g][h]==0&& Mark[g][h]==0){//下一地点是合理地点,且未访问
Mark[g][h]=1;if(SeekPath(g, h)){
cout <<"("<< g <<", "<< h <<"), "<<"Direction: "<< d << endl;return1;}}//回溯,换一个方向继续}if(x ==1&& y ==1){
cout <<"no path out!"<< endl;}return0;}intmain(){int i, j;
Mark[1][1]=1;if(SeekPath(1,1)){
cout <<"("<<1<<" , "<<1<<"), "<<"Direction: "<<"E"<< endl;}system("pause");return0;}