dfs+记忆化 #3没过看不出原因 求大佬帮调
查看原帖
dfs+记忆化 #3没过看不出原因 求大佬帮调
1104397
silencer468楼主2024/3/13 19:13
#include<iostream>
using namespace std;
int n,m;
string a1[1000];//地图
short book[1001][1001];
short fxx[]={1,-1,0,0};
short fyy[]={0,0,1,-1};
int f[100001];每个连通图的值
long long ans;
int d;//第几个连通图
  
void dfs(int x,int y){
    for(int i=0;i<4;i++){             
        int xx=fxx[i]+x,yy=fyy[i]+y;
        if(xx>=0&&xx<n&&yy>=0&&yy<n)
        if(a1[xx][yy]!=a1[x][y]&&book[xx][yy]==0){
            f[d]++;
            book[xx][yy]=d;
            dfs(xx,yy);
        }
    }
}


int main()
{                              
   cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>a1[i];
    }
    //用于记录是第几个连通图
    for(int i=0;i<m;i++){
        int x,y;
        cin>>x>>y;
        x--;y--;
        //如果是已探索过的连通图中,则直接输出答案
        if(book[x][y]==0){
            d++;
            ans=0;
            book[x][y]=d;
            f[d]++;
            dfs(x,y);
            cout<<f[book[x][y]]<<endl;
        }else cout<<f[book[x][y]]<<endl;
    }
    return 0;
}
2024/3/13 19:13
加载中...