广度优先寻找迷宫!

来源:互联网 发布:windows开机吉他谱 编辑:程序博客网 时间:2024/05/21 08:03
#include<iostream>using namespace std;#include<stdio.h>#include<queue>const int INF=1000000000;typedef pair<int,int> P;char maze[105][105];int d[105][105];int n,m;int sx,sy;int gx,gy;int dx[4]={1,0,-1,0};int dy[4]={0,-1,0,1};int bfs(){    queue<P> que;    que.push(P(sx,sy));//插入第一个    for(int i=0;i<n;i++)    {        for(int j=0;j<m;j++)//要将距离矩阵做好        {            d[i][j]=INF;        }    }    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(0<=nx&&nx<n&&0<=ny&&ny<m&&maze[nx][ny]!='#'&&d[nx][ny]==INF)            {                que.push(P(nx,ny));                d[nx][ny]=d[p.first][p.second]+1;            }        }    }    return d[gx][gy];}int main(){    char c;    cin>>n>>m;    sx=0;    sy=3;    gx=3;    gy=0;    scanf("%c",&c);    for(int i=0;i<n;i++)        {            for(int j=0;j<m;j++)            {                scanf("%c",&maze[i][j]);            }            scanf("%c",&c);        }    int res=bfs();    cout<<res<<endl;    return 0;}

原创粉丝点击