DFS爆0求助,全TLE
查看原帖
DFS爆0求助,全TLE
800322
Zouzhuoxuan楼主2023/1/12 23:08
#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
char a[1005][1005];
int n,m,tmp1,tmp2,dx[]={0,0,0,-1,1},dy[]={0,1,-1,0,0},maxn;
bool vis[1005][1005];
void dfs(int x,int y,bool last,int step)
{
    if(!(x>0&&x<=n&&y>0&&y<=n)) return;
    for(int i=1;i<=4;i++)
    {
        int ddx=x+dx[i],ddy=y+dy[i];
        if(last==a[ddx][ddy]||vis[ddx][ddy]) continue;
        vis[ddx][ddy]=true;
        maxn=max(maxn,step);
        dfs(ddx,ddy,!last,step+1);
        vis[ddx][ddy]=false;
    }
    return;
}
int main()
{
    int i,j;
    memset(vis,false,sizeof(vis));
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            cin>>a[i][j];
            if(a[i][j]=='\n') j--;
        }
    }
    for(i=1;i<=m;i++)
    {
        maxn=0;
        memset(vis,false,sizeof(vis));
        scanf("%d%d",&tmp1,&tmp2);
        vis[tmp1][tmp2]=true;
        dfs(tmp1,tmp2,(bool)a[tmp1][tmp2],1);
        printf("%d\n",++maxn);
    }
}

以我的才能是写不出这道题的

2023/1/12 23:08
加载中...