注意点1:
入栈的时机是dfs的开头
注意点2:
如何在走到终点后返回:
用flag标记,如果走到flag=1;return 1;
if(flag);return 1;
注意点3:
题目要求先向右、向下、向左、向上的顺序,以及在无法走到终点时输出NO
注意点4:
可以创建数组dx,和dy来进行向上、下、左,右减少代码量
注意点5:
path的存储:
是在dfs开头存的,然后一旦flag=1了,就不要再dfs了
#include <stdio.h>
#include <stdlib.h>
#define N 100
struct data
{
int x;
int y;
}path[N];
int M[N][N];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int mark[N][N];
int index;
int flag;
int n;
void dfs(int x,int y)
{
path[index].x=x;
path[index++].y=y;
mark[x][y]=1;
if(x==n-2&&y==n-2)
{
flag=1;
/*path[index].x=n-2;
path[index++].y=n-2;*/
return ;
}
for(int i=0;i<4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=0&&xx<n&&yy>=0&&yy<n&&!M[xx][yy]&&!mark[xx][yy])
{
if(flag)
{
return;
}
dfs(xx,yy);
}
}
if(flag==0)
{
index--;
}
return ;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&M[i][j]);
}
}
dfs(1,1);
if(flag)
{
//printf("yes");
for(int i=0;i<index;i++)
{
printf("(%d,%d)",path[i].x,path[i].y);
}
}
else
{
printf("NO");
}
return 0;
}