深搜走迷宫
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int map[102][102],m,n;
int x1,y1,x3,y3;
int dis[4][2]= {1,0,0,1,-1,0,0,-1}; //方向数组,总共有四个方向
int e;//仅储存,因题而异,可以没有。
bool the;
int vis[6][6];//记录这个点遍历过没有
struct point
{
int i,j,t;
};//有三个属性,前两个是坐标,第三个时到达这个点的时间。
point markway[1000];//记录途经点,最后输出用
void dfs(int y,int x)
{
int i;
point rear;
for(i=0; i<4; i++)
{
rear.i=y+dis[i][0];
rear.j=x+dis[i][1];
if(rear.i>=1&&rear.j>=1&&rear.i<=m&&rear.j<=n)
{
if(map[rear.i][rear.j]!=0&&!vis[rear.i][rear.j])
{
e++;
markway[e]=rear;
markway[e].t=markway[e-1].t+1;
vis[rear.i][rear.j]=1;
if(y==y3&&x==x3)
{
return ;
}
dfs(rear.i,rear.j);
//vis[rear.i][rear.j]=0;
}
}
}
return;
}
int main()
{
int i,j;
char a;
while(~scanf("%d%d",&m,&n))
{
getchar();
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
{
scanf("%c",&a);
if(a=='0')
map[i][j]=0;//墙
if(a=='2')
{
map[i][j]=2;//起点
y1=i;
x1=j;
}
if(a=='1')
map[i][j]=1;//路
if(a=='3')
{
map[i][j]=3;//终点
y3=i;
x3=j;
}
}
getchar();
}
the=0;
memset(vis,0,sizeof(vis));
vis[1][1]=1;
dfs(y1,x1);
for(i=1; i<=e; i++)
printf("(%d,%d)=%d ",markway[i].i,markway[i].j,markway[i].t);
}
return 0;
}
/**
5 5
21011
11010
01111
10011
31111
*/