dfs70分
  • 板块P1141 01迷宫
  • 楼主LiaoYF1
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/6/27 09:49
  • 上次更新2023/10/27 22:29:20
查看原帖
dfs70分
633466
LiaoYF1楼主2022/6/27 09:49
#include<iostream>
using namespace std;
int n,m,ans,cnt=1,d[1000005],f[1005][1005];
bool a[1005][1005],visit[1005][1005];
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
inline bool ok(int x,int y){
    return x>=1&&x<=n&&y>=1&&y<=n&&!visit[x][y];
}
void dfs(int x,int y){
    //if(visit[x][y])return;
    //cout<<x<<" "<<y<<endl;
    ans++;
    visit[x][y]=1;
    f[x][y]=cnt;
    for(int i=0;i<4;i++){
        int xx=x+dx[i],yy=y+dy[i];
        if(a[xx][yy]==!a[x][y]&&ok(xx,yy)){
            dfs(xx,yy);
        }
    }
    d[cnt]=ans;
    //visit[x][y]=0;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            char t;
            cin>>t;
            a[i][j]=t-'0';
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            f[i][j]=-1;
        }
    }
    for(int i=0;i<m;i++){
        int ii,jj;
        ans=0;
        cin>>ii>>jj;
        //cout<<ii<<" "<<jj<<endl;
        if(f[ii][jj]==-1){
            dfs(ii,jj);
            cnt++;
        }
        cout<<d[f[ii][jj]]<<"\n";
        for(int j=1;j<=n;j++){
        	for(int k=1;k<=n;k++){
            	visit[j][k]=0;
        	}
    	}
    }
    return 0;
}

开了O2,参照了囧人232的题解做了优化,还是TLE了

2022/6/27 09:49
加载中...