迷宫的最短路径(深度bfs)

来源:互联网 发布:海底捞排号软件 编辑:程序博客网 时间:2024/06/05 07:17

给定一个N*M的迷宫,#代表墙壁,.代表通道,S代表起点,G代表终点,求S到G的最小步数。

#include<iostream>#include<queue>using namespace std;const int INF=1000000;typedef pair<int,int> P;int main(){    char map[100][100];    int sx,sy;    int gx,gy;    int n,m;    int d[100][100];    int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};    queue<P> que;    cin>>n>>m;    for(int i=0;i<n;i++){        for(int j=0;j<m;j++){            cin>>map[i][j];        }    }    for(int i=0;i<n;i++){        for(int j=0;j<m;j++){            if(map[i][j]=='S')            {                sx=i;                sy=j;            }            if(map[i][j]=='G')            {                gx=i;                gy=j;            }        }    }    for(int i=0;i<n;i++){        for(int j=0;j<m;j++){            d[i][j]=INF;        }    }    que.push(P(sx,sy));    d[sx][sy]=0;    while(que.size()){        P p=que.front();        que.pop();        if(p.first==gx&&p.second==gy)            break;        for(int i=0;i<4;i++){            int nx=p.first+dx[i];            int ny=p.second+dy[i];            if(nx>=0&&nx<n&&ny>=0&&ny<m&&map[nx][ny]!='#'&&d[nx][ny]==INF){                que.push(P(nx,ny));                d[nx][ny]=d[p.first][p.second]+1;            }        }    }    cout<<d[gx][gy];    return 0;}
0 0
原创粉丝点击