宽度优先搜索--------迷宫的最短路径问题(dfs)

Posted joe2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宽度优先搜索--------迷宫的最短路径问题(dfs)相关的知识,希望对你有一定的参考价值。

宽度优先搜索运用了队列(queue)在unility头文件中

源代码

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<utility>
using namespace std;
typedef pair<int,int> P;
#define INF 100000000
#define maxn 101
queue<P>que;
char mi[maxn][maxn];
int dx[]= {1,0,-1,0},dy[]= {0,1,0,-1};//四步移动运用两个数组
int sx,sy,gx,gy,N,M,d[maxn][maxn];
int dfs()
{
    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=dx[i]+p.first,ny=dy[i]+p.second;
            if(nx>=0&&nx<N&&ny>=0&&ny<M&&d[nx][ny]==INF&&mi[nx][ny]!=‘W‘)
            {
                que.push(P(nx,ny));
                d[nx][ny]=d[p.first][p.second]+1;
            }
        }
    }
    return d[gx][gy];
}
int main()
{
    while(cin>>N>>M)
    {
        for(int i=0; i<N; i++)
            scanf("%s",mi[i]);
        for(int i=0; i<N; i++)
            for(int j=0; j<M; j++)
            {
                if(mi[i][j]==‘S‘)
                {
                    sx=i;
                    sy=j;
                }
                if(mi[i][j]==‘G‘)
                {
                    gx=i;
                    gy=j;
                }
                d[i][j]=INF;
            }
        int ans=dfs();
        if(ans!=INF)
        cout<<ans<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

以上是关于宽度优先搜索--------迷宫的最短路径问题(dfs)的主要内容,如果未能解决你的问题,请参考以下文章

迷宫的最短路径(简单BFS)

迷宫的最短路径 (BFS)

迷宫的最短路径算法 代码(C++)

深度优先搜索(迷宫救人最短路径)

广度优先搜索-迷宫问题

bfs_迷宫求最短路径