main.cpp
#include<iostream>
using namespace std;
int Maze[m+2][p+2];
int mark[m+2][p+2];
int SeekPath(int x,int y);
struct offsets
{
int a,b;
char *dir;
};
offsets move[4]={{-1,0,"N"},
{0,1,"E"},
{1,0,"S"},
{0,-1,"W"}};
int main()
{
int i,j;
for(i=0;i<m+2;i++)
{
for(j=0;j<p+2;j++)
{
cin>>Maze[i][j];
mark[i][j]=0;
}
}
mark[1][1]=1;
if(SeekPath(1,1))
cout<<"("<<1<<","<<1<<"),"<<"Direction:"<<"E"<<endl;
return 0;
}
int SeekPath(int x,int y)
{
int i,g,h;
char *d;
if(x==m&&y==p)
return 1;
for(i=0;i<4;i++)
{
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:"<<move[i].dir<<endl;
return 1;
}
}
//回溯,换一个方向再试探通向出口的路径
}
return 0;
}
注:1.只能实现寻找一条可行的路径
2.包含N\E\S\W四个方向(按顺时针)
3.从(1,1)开始,到(m,p)结束