大佬们,查不出问题来了,BFS+染色三个WA,救救蒟蒻吧
查看原帖
大佬们,查不出问题来了,BFS+染色三个WA,救救蒟蒻吧
332488
Wind_Journey楼主2022/7/23 20:11
#include <bits/stdc++.h>
using namespace std;
struct node{
	int x;
	int y;
};
const int N=1010;
int n,m,f[1010][1010],a[1010][1010],vis[1010][1010],turn[4][2]={{0,1},{1,0},{-1,0},{0,-1}},ans=1;
queue<node> b;
int bfs(node s){
	if(f[s.x][s.y]) return f[s.x][s.y];
	b.push(s);
	vis[s.x][s.y]=1;
	while(!b.empty()){
		node u=b.front();
		b.pop();
		for(int i=0;i<4;i++){
			int xx=u.x+turn[i][0],yy=u.y+turn[i][1];
			if(xx>0&&yy>0&&xx<=n&&yy<=n&&a[xx][yy]!=a[u.x][u.y]&&!vis[xx][yy]){
				ans++;
				vis[xx][yy]=1;
				node temp;
				temp.x=xx,temp.y=yy;
				b.push(temp);
			}
		}
	}
	return ans;
}
void rs(node s){
	b.push(s);
	f[s.x][s.y]=ans;
	vis[s.x][s.y]=0;
	while(!b.empty()){
		node u=b.front();
		b.pop();
		for(int i=0;i<4;i++){
			int xx=u.x+turn[i][0],yy=u.y+turn[i][1];
			if(xx>0&&yy>0&&xx<=n&&yy<=n&&a[xx][yy]!=a[u.x][u.y]&&!f[xx][yy]){
				f[xx][yy]=ans;
				vis[xx][yy]=0;
				node temp;
				temp.x=xx,temp.y=yy;
				b.push(temp);
			}
		}
	}
	return;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		string temp;
		cin>>temp;
		for(int j=0;j<n;j++){
			a[i][j+1]=temp[j]-'0';
		}
	}
	for(int i=0;i<m;i++){
		ans=1;
		node f;
		cin>>f.x>>f.y;
		cout<<bfs(f)<<endl;
		rs(f);
	}
	return 0;
}
2022/7/23 20:11
加载中...