01迷宫求调

P1141 01迷宫

Are_this @ 2024-06-15 12:33:48

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[1005][1005];
ll b[1005][1005];
bool f[1005][1005];
ll n,m,s,a1,b1,a2,b2,k,zd=LLONG_MIN;
ll dx[5]={0,-1,0,0,1};
ll dy[5]={0,0,-1,1,0};
struct data
{
    ll x,y,s;
    ll zx; 
}bbt[1000*1000+10];
string ss;
char c;
void bfs(ll x,ll y)
{
    zd=0;
    ll tx=0,ty=0;
    ll h=0,t=1;
    bbt[0].x=x;
    bbt[0].y=y;
    f[x][y]=1;
    while(h!=t)
    {
        for(ll i=1;i<=4;i++)
        {
            tx=bbt[h].x+dx[i];
            ty=bbt[h].y+dy[i];
            ll p=bbt[h].s;
            if(tx<1||ty<1||tx>n||ty>n|f[tx][ty]||a[tx][ty]==a[bbt[h].x][bbt[h].y]||b[tx][ty]>0)continue;
            f[tx][ty]=1;
            bbt[t].x=tx;
            bbt[t].y=ty;
            bbt[t].s=p+1;
            bbt[t].zx=h;
            t++;
        }
        h++;
    }
    for(ll i=0;i<=h;i++)
    {
        b[bbt[i].x][bbt[i].y]=h;
    }
}
int main()
{
    cin>>n>>k;
    for(ll i=1;i<=n;i++)
    {
        cin>>ss;
        for(ll j=1;j<=n;j++)
        {
            a[i][j]=(ss[j-1]-'0');
        }
    }
    for(ll i=1;i<=n;i++)
    {
        for(ll j=1;j<=n;j++)
        {
            if(f[i][j]==0)bfs(i,j);
        }
    }
    while(k--)
    {
        scanf("%lld%lld",&a1,&b1);
        printf("%lld\n",b[a1][b1]);
    }
    return 0;
}

WA 9个点!


|