BFS(逃离迷宫)

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int ,int>PII;
const int N=2e5+10,M=510;
char c[M][M];
int dist[M][M][2];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int n,m;
int  bfs(int ix,int iy)
{
    memset(dist,-1,sizeof(dist));
    queue<pair<PII,int>>ans;
    dist[ix][iy][0]=0;
    ans.push({{ix,iy},0});
    bool st=false;
    int time=0;
    while(ans.size())
    {
        auto t=ans.front();
        ans.pop();
        int x=t.first.first,y=t.first.second;
        int state=t.second;
        time=dist[x][y][state];
        for(int i=0;i<4;i++)
        {
            int ax=dx[i]+x,ay=dy[i]+y;
           
            if(ax<0||ay<0||ax>=n||ay>=m)continue;
            if(c[ax][ay]=='#')continue;
            else if(c[ax][ay]=='K')
            {
                if(dist[ax][ay][state]==-1)
                {
                    
                    dist[ax][ay][1]=time+1;
                    ans.push({{ax,ay},1});
                }
            }
            else if(c[ax][ay]=='E')
            {
                if(state==1)
                {
                    dist[ax][ay][state]=time+1;
                    return  dist[ax][ay][state];
                }
            }
            else if(dist[ax][ay][state]==-1)
            {
                 dist[ax][ay][state]=time+1;
                ans.push({{ax,ay},state});
            }
            
        }
    }
        return -1;
}
signed main()
{
    int T;
    cin>>T;
    while(T--)
    {
        queue<PII>ans;
        cin>>n>>m;
        int ix,iy;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                cin>>c[i][j];
                if(c[i][j]=='P')
                {
                    ix=i,iy=j;
                }
            }
        int answer=bfs(ix,iy);
        if(answer==-1)
            cout<<"No solution"<<endl;
        else cout<<answer<<endl;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务