70tle求助,玄关!
  • 板块P1141 01迷宫
  • 楼主Greeper
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/12/14 19:25
  • 上次更新2024/12/14 21:39:21
查看原帖
70tle求助,玄关!
1311900
Greeper楼主2024/12/14 19:25
#include<bits/stdc++.h>
using namespace std;
bool a[1005][1005];
bool f[1005][1005];
int nu[1005][1005];
int n,m,ii,jj;
int gx[4]={0,1,0,-1},gy[4]={1,0,-1,0};
int bfs()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            f[i][j]=0;
        }
    }
    if(nu[ii][jj])
    {
        return nu[ii][jj];
    }
    int num=1;
    queue<int> x;
    queue<int> y;
    f[ii][jj]=1;
    x.push(ii);
    y.push(jj);
    while(!x.empty())
    {
        int nx=x.front(),ny=y.front();
        x.pop();y.pop();
        for(int i=0;i<4;i++)
        {
            int tx=nx+gx[i],ty=ny+gy[i];
            if(tx>=1&&tx<=n&&ty>=1&&ty<=n)
            {
                if(!f[tx][ty]&&a[nx][ny]!=a[tx][ty])
                {
                    f[tx][ty]=1;
                    num++;
                    x.push(tx);
                    y.push(ty);
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(f[i][j])
            {
                nu[i][j]=num;
            }
        }
    }
    return num;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            scanf("%1d",&a[i][j]);
        }
    }
    
    while(m--)
    {
        cin>>ii>>jj;
        cout<<bfs()<<endl;
    }
    return 0;
}
2024/12/14 19:25
加载中...