我是先看了大神的模板,照着自己写了一个题。好不容易AC了
大神模板:https://blog.csdn.net/b2utyyomi/article/details/51175700
我的AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct node
{
int x;
int y;
int step;
};
node qq[10][10];
int map[10][10],vis[10][10];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int bfs()
{
memset(vis,0,sizeof(vis));
queue<node>q;
node next;
node cur;
cur.x=0;
cur.y=0;
cur.step=0;
q.push(cur); //入栈
vis[0][0]=1;
while(!q.empty())
{
cur=q.front();
q.pop();
if(cur.x==4&&cur.y==4) //此题是4,4点,可以随便设置
{
return cur.step; //返回的是走的步数
}
for(int i=0;i<=3;i++) //四个方向
{
int tx=dx[i]+cur.x;
int ty=dy[i]+cur.y;
if(tx<0||tx>4||ty<0||ty>4||vis[tx][ty]==1||map[tx][ty]==1)
continue;
vis[tx][ty]=1;
next.x=tx;
next.y=ty;
next.step=cur.step+1;
qq[tx][ty].x=cur.x; //qq存储上一个点的x和y
qq[tx][ty].y=cur.y;
q.push(next);
}
}
return -1;
}
void pri(int sx,int sy) //输出的函数,sx,sy代表终点
{
if(sx==0&&sy==0)
{
printf("(%d, %d)\n", sx, sy);
return;
}
pri(qq[sx][sy].x,qq[sx][sy].y);//qq存储的是sx,sy上一个点的x和y //用递归实现了路径输出
printf("(%d, %d)\n", sx, sy);
}
int main()
{
int i,j;
for(i=0;i<5;i++) //读入迷宫
for(j=0;j<5;j++)
scanf("%d",&map[i][j]);
int x=0,y=0; //这个题是从00点开始 这个地方可以重新定义一个node,传入起点
int ans=bfs();
if(ans>0)
{
pri(4,4);
}
return 0;
}