题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
#include <stdio.h>
int maze[10][10];
int hang,lie;
int path[1000][2] = {0};
int max_path[1000][2] = {0};
int max_len = 0;;
void DFS(int x,int y,int index)
{
if(x == hang-1 && y == lie-1)
{
path[index][0] = x;
path[index][1] = y;
index++;
if(index>max_len)
{
max_len = index;
for(int i = 0;i<index;i++)
{
max_path[i][0] = path[i][0];
max_path[i][1] = path[i][1];
}
}
return;
}
else if(maze[x][y] == 0)
{
path[index][0] = x;
path[index][1] = y;
maze[x][y] = 1;
index++;
if(x+1<hang && maze[x+1][y]==0)
{
DFS(x+1, y, index);
}
if(x-1>=0 && maze[x-1][y]==0)
{
DFS(x-1, y, index);
}
if(y+1<lie && maze[x][y+1]==0)
{
DFS(x, y+1, index);
}
if(y-1>=0 && maze[x][y-1]==0)
{
DFS(x, y-1, index);
}
maze[x][y] = 0;
}else {
return;
}
}
int main() {
while (~scanf("%d %d",&hang,&lie)) {
for(int i = 0;i<hang;i++)
{
for(int j = 0;j<lie;j++)
{
scanf("%d",&maze[i][j]);
}
}
}
DFS(0, 0, 0);
for(int i = 0;i<max_len;i++)
{
printf("(%d,%d)\n",max_path[i][0],max_path[i][1]);
}
}
