这道题的一个不同之处在于递归寻找可行路径
题目链接
#include<stdio.h>
#include<string.h>
struct node
{
int x,y;
int f;
};
node q[27];
void dfs(int n)
{
if(q[n].f!=0) dfs(q[n].f);
printf("(%d, %d)\n",q[n].x,q[n].y);
return ;
}
int main()
{
int maze[5][5];
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
scanf("%d",&maze[i][j]);
int head,tail,tx,ty;
int flag;
int x[4]={0,-1,0,1};
int y[4]={-1,0,1,0};
int book[5][5];
memset(book,0,sizeof(book));
head=1;tail=2;
q[1].x=0,q[1].y=0;
q[1].f=0;flag=0;
while(head<tail)
{
for(int i=0;i<4;i++)
{
tx=q[head].x+x[i];
ty=q[head].y+y[i];
if(tx<0||ty<0||tx>4||ty>4||book[tx][ty]==1||maze[tx][ty]==1)
continue;
book[tx][ty]=1;
q[tail].x=tx;
q[tail].y=ty;
q[tail].f=head;
tail++;
if(tx==4&&ty==4)
flag=1;
}
if(flag==1)
break;
head++;
}
dfs(tail-1);
return 0;
}