大佬帮帮我,不知道哪里错了QwQ(bfs)
查看原帖
大佬帮帮我,不知道哪里错了QwQ(bfs)
465206
XrkArul楼主2021/4/27 15:10
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
struct pp {int x;int y;int t;}p[10010][10010];
int  v[10010][10010];
int vis[10010];
string s;
char a[3100][3100];
struct px {int x;int y;}aa[10010],bb[10010];
int x0,y9,x,y;
queue <pp> point;
int walk[4][2]={0,1,0,-1,1,0,-1,0};
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>s;
        for(int j=1;j<=m;j++)
        {
            a[i][j]=s[j-1];
            if(a[i][j]>='A'&&a[i][j]<='Z')
            {
                if(vis[a[i][j]])
                bb[a[i][j]]=(px){i,j};
                else
                aa[a[i][j]]=(px){i,j};
                vis[a[i][j]]=1;
            }
            if(a[i][j]=='@')
            {
             x0=i;y9=j;   
            }
        }
    }
    point.push((pp){x0,y9,0});
    while(point.size())
    {
        pp qwq=point.front();
        if(a[qwq.x][qwq.y]=='=')
        {
            cout<<qwq.t<<endl;
            return 0;
        }
        point.pop();
        int xx,yy;
        int xxx=qwq.x,yyy=qwq.y;
        if(a[qwq.x][qwq.y]>='A'&&a[qwq.x][qwq.y]<='Z')
        {
            if(xxx==aa[a[qwq.x][qwq.y]].x&&yyy==aa[a[qwq.x][qwq.y]].y)
            xxx=bb[a[qwq.x][qwq.y]].x,yyy=bb[a[qwq.x][qwq.y]].y;
            if(xxx==bb[a[qwq.x][qwq.y]].x&&yyy==bb[a[qwq.x][qwq.y]].y)
            xxx=aa[a[qwq.x][qwq.y]].x,yyy=aa[a[qwq.x][qwq.y]].y;
        }
        for(int i=0;i<=3;i++)
         {
            xx=xxx+walk[i][0];
            yy=yyy+walk[i][1];
            if(xx<1||xx>n||yy<1||yy>m||v[xx][yy]||a[xx][yy]=='#')
            continue;
            v[xx][yy]=1;
            point.push((pp){xx,yy,qwq.t+1});
         }
        
    }
    return 0;
}

交上去25分,其他测试点都WA。QAQ!

2021/4/27 15:10
加载中...