题目链接
题目大意:
一个 5 * 5 的迷宫,从左上角走到右下角,求最短路径 并输出
解题思路:
不会呀 然后翻了无数题解都是 记录前驱 然后 递归逆向打印
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int m[6][6];
bool vis[110][110];
int p[110];
int head;
int tail;
int d[4][2]={
{-1,0},{1,0},{0,-1},{0,1}};
struct node
{
int x;
int y;
}a[110];
int print(int x)
{
if(p[x]!=-1)
{
print(p[x]);
}
printf("(%d, %d)\n",a[x].x,a[x].y);
return 0;
}
void bfs()
{
while(head<tail)
{
for(int i=0;i<4;i++)
{
int xx=a[head].x+d[i][0];
int yy=a[head].y+d[i][1];
if(xx<0||xx>=5||yy<0||yy>=5)
continue;
if(m[xx][yy]==1)
continue;
if(vis[xx][yy]==false)
{
a[tail].x=xx;
a[tail].y=yy;
vis[xx][yy]=true;
p[tail]=head;
tail++;
}
if(xx==4&&yy==4)
{
print(tail-1);//tail 是指向最后一位的下一个位置(上面tail++了)
//所以这里需要-1
return;
}
}
head++;
}
}
int main()
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
cin>>m[i][j];
head=0;
tail=0;
a[tail].x=0;
a[tail].y=0;
vis[tail][tail]=true;
p[tail]=-1;
tail++;
bfs();
return 0;
}