01-bfs求调
查看原帖
01-bfs求调
541254
BugGod楼主2023/11/18 21:46
#include<bits/stdc++.h>
using namespace std;
//#define int long long
int n,m,ans,dist[1010][1010][4],dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
char mapp[1010][1010];
struct node
{
    int x,y,d;
};
deque<node>q;
void ftadd(int x,int y,int d,int step)
{
    if(step<dist[x][y][d])
    {
        q.push_front((node){x,y,d});
        dist[x][y][d]=step;
    }
}
void bkadd(int x,int y,int d,int step)
{
    if(step<dist[x][y][d])
    {
        q.push_back((node){x,y,d});
        dist[x][y][d]=step;
    }
}
void bfs()
{
    ftadd(n,m,1,0);
    while(q.size())
    {
        node k=q[0];
        q.pop_front();
        int d=k.d,xx=k.x+dx[d],yy=k.y+dy[d],dis=dist[k.x][k.y][d];
        if(xx>=1&&xx<=n&&yy>=1&&yy<=n)ftadd(xx,yy,d,dis);
        if(mapp[k.x][k.y]=='#')
        {
            for(int l=0;l<4;l++)
            {
                if(l!=d)bkadd(k.x,k.y,l,dis+1);
            }
        }
    }
}
signed main()
{
    memset(dist,0x3f3f3f3f,sizeof(dist));
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>mapp[i][j];
        }
    }
    bfs();
    if(dist[1][1][1]==0x3f3f3f3f)cout<<-1;
    else cout<<dist[1][1][1];
    return 0;
}
2023/11/18 21:46
加载中...