90pts BFS 求调(WA on #8)
查看原帖
90pts BFS 求调(WA on #8)
1420536
Mitsui_Hisashi楼主2025/7/22 17:22
#include"bits/stdc++.h"
using namespace std;
int n,xx,yy,mn[105][105],d[4][2]={{1,0},{0,-1},{-1,0},{0,1}},ans=0x3f3f3f3f;
char mp[105][105];
struct node{
    int x,y,cnt,dire;
}now;
queue<node>q;
void bfs(int xx,int yy){
    memset(mn,0x4f,sizeof(mn));
    mn[xx][yy]=0;
    for (int i=0;i<4;i++)
        q.push({xx,yy,0,i});
    while (q.size()){
        now=q.front();q.pop();
        if(mp[now.x][now.y]=='B'){
            ans=min(ans,now.cnt);
            continue;
        }
        for (int i=0;i<4;i++){
            int tx=now.x+d[i][0],ty=now.y+d[i][1];
            if(tx>0&&tx<=n&&ty>0&&ty<=n&&mp[tx][ty]!='x'&&mn[tx][ty]>now.cnt+(abs(i-now.dire)&1)){
                mn[tx][ty]=now.cnt+(abs(i-now.dire)&1);
                q.push({tx,ty,mn[tx][ty],i});
            }
        }
    }
}
signed main(){
	std::cin.tie(0);
    std::cout.tie(0);
    std::ios::sync_with_stdio(0);
    cin>>n;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++){
            cin>>mp[i][j];
            if(mp[i][j]=='A')
                xx=i,yy=j;
        }
    bfs(xx,yy);
    cout<<(ans==0x3f3f3f3f?-1:ans);
    return 0;
}
2025/7/22 17:22
加载中...