您的位置:首页 > 其它

迷宫的最短路径(bfs)

2018-03-28 20:08 281 查看
题意:给定一个大小为n*m的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出起点到终点所需的最小步数。(注:本题假定从起点一定可以移动到终点)#include<iostream>
#include<queue>
using namespace std;
typedef pair<int,int> P;
const int INF= 100000000;
int n,m;
int si,sj,gi,gj;
char map[101][101];
int d[101][101];
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};

int bfs()
{
queue<P> q;
q.push(P(si,sj));
d[si][sj]=0;
while(!q.empty())
{
P p = q.front();
q.pop();
if(p.first==gi&&p.second==gj)
break;
for(int i = 0;i<4;i++)
{
int nx = p.first+dir[i][0];
int ny = p.second+dir[i][1];
if(nx>=0&&nx<n&&ny>=0&&ny<m&&map[nx][ny]!='#'&&d[nx][ny]==INF)
{
q.push(P(nx,ny));
d[nx][ny] = d[p.first][p.second] + 1;
}
}
}
return d[gi][gj];

}
int main()
{
while(cin>>n>>m)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
d[i][j]=INF;
cin>>map[i][j];
if(map[i][j]=='S')
{
si=i;sj=j;
}
if(map[i][j]=='G')
{
gi=i;gj=j;
}
}
}
cout<<bfs()<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: