BFS+记忆化,染色,仍然t掉3个点
  • 板块P1141 01迷宫
  • 楼主zyc6666
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/7/15 21:29
  • 上次更新2023/10/27 20:07:51
查看原帖
BFS+记忆化,染色,仍然t掉3个点
324883
zyc6666楼主2022/7/15 21:29
#include<bits/stdc++.h>  
using namespace std;  
struct zb{  
    int x,y;  
};  
bool a[1001][1001];  
int c[1001][1001];  
int r[500000];  
int h=0;  
queue<zb> zyc;  
int main(){  
    int n,m;  
    cin>>n>>m;  
    for(int i=0;i<n;i++){  
        for(int j=0;j<n;j++) {char t;cin>>t;a[i][j]=t-'0';}  
    }  
    for(int i=0;i<m;i++){  
    	bool b[1001][1001]={};  
        zb e;  
        cin>>e.x>>e.y;  
        e.x=e.x-1;  
        e.y=e.y-1;  
        if(r[c[e.x][e.y]]!=0){  
        	cout<<r[c[e.x][e.y]]<<endl;  
        	continue;  
		}  
		h+=1;  
        int ans=1;  
        zyc.push(e);  
        b[e.x][e.y]=1;  
        while(!zyc.empty()){  
            zb ovo=zyc.front();  
            zyc.pop();  
            if(ovo.x>0 and a[ovo.x-1][ovo.y]!=a[ovo.x][ovo.y] and !b[ovo.x-1][ovo.y]){  
                ans++;  
                zb temp={ovo.x-1,ovo.y};  
                zyc.push(temp);  
                b[ovo.x-1][ovo.y]=1;  
                c[ovo.x-1][ovo.y]=h;  
            }  
            if(ovo.y>0 and a[ovo.x][ovo.y-1]!=a[ovo.x][ovo.y] and !b[ovo.x][ovo.y-1]){  
                ans++;  
                zb temp={ovo.x,ovo.y-1};  
                zyc.push(temp);  
                b[ovo.x][ovo.y-1]=1;  
                c[ovo.x][ovo.y-1]=h;  
            }
            if(ovo.y<n-1 and a[ovo.x][ovo.y+1]!=a[ovo.x][ovo.y] and !b[ovo.x][ovo.y+1]){  
                ans++;  
                zb temp={ovo.x,ovo.y+1};  
                zyc.push(temp);  
                b[ovo.x][ovo.y+1]=1;  
                c[ovo.x][ovo.y+1]=h;  
            }  
            if(ovo.x<n-1 and a[ovo.x+1][ovo.y]!=a[ovo.x][ovo.y] and !b[ovo.x+1][ovo.y]){  
                ans++;  
                zb temp={ovo.x+1,ovo.y};  
                zyc.push(temp);  
                b[ovo.x+1][ovo.y]=1;  
                c[ovo.x+1][ovo.y]=h;  
            }  
        }  
        cout<<ans<<endl;  
        r[h]=ans;  
    }  
}  
  
2022/7/15 21:29
加载中...