4个测试点超时,剩下都对,求调

P1141 01迷宫

isalpha @ 2024-05-15 21:56:24

#include<bits/stdc++.h>
using namespace std;
char s[1001][1001];
int mark[1001][1001];
int fx[4]={-1,1,0,0},fy[4]={0,0,-1,1};
int ans,n,m;
void dfs(int x,int y)
{
    if(x<1||x>n)
    {
        ans--;
        return;
    }
    if(y<1||y>n)
    {
        ans--;
        return;
    }
    for(int i=0;i<=3;i++)
    {
        if(s[x+fx[i]][y+fy[i]]!=s[x][y]&&mark[x+fx[i]][y+fy[i]]==0)
        {
            ans++;
            mark[x+fx[i]][y+fy[i]]++;
            dfs(x+fx[i],y+fy[i]);
        }
    }
    return;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    cin>>s[i][j];
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=n;j++)
        for(int k=1;k<=n;k++)
        mark[j][k]=0;
        int x,y;
        cin>>x>>y;
        mark[x][y]=1;
        ans=0;
        dfs(x,y);
        cout<<ans+1<<'\n';
    }
}

|