P1141求调
  • 板块学术版
  • 楼主lucky_Oscar
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/4 22:24
  • 上次更新2024/10/5 09:27:16
查看原帖
P1141求调
643869
lucky_Oscar楼主2024/10/4 22:24

80分

#include<iostream>
#include<cstdio>
#include<queue>
#include<string>
using namespace std;

int n,m,u,v;
int maps[1005][1005],way[4][2] = {{1,0},{0,1},{-1,0},{0,-1}},dis[1005][1005];
bool vis[1005][1005];
string s;
queue <int> x1,y1;
void Bfs(int x,int y){
	while(!x1.empty()){
		x1.pop(),y1.pop();
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			vis[i][j] = 0;
		}
	}
	int cnt = 0;
	x1.push(x),y1.push(y);
	vis[x][y] = 1;
	while(!x1.empty()){
		int o1 = x1.front(),o2 = y1.front();
		vis[o1][o2] = 1;
		x1.pop(),y1.pop();
		for(int i=0;i<4;i++){
			int os1 = o1 + way[i][0];int os2 = o2 + way[i][1];
			if(!vis[os1][os2] && maps[os1][os2] != maps[o1][o2] && os1 <= n && os2 <= n && os2 >= 1 && os1 >= 1){
				vis[os1][os2] = 1;
				cnt++;
				x1.push(os1),y1.push(os2);
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(vis[i][j]){
				dis[i][j] = cnt+1;
			}
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		cin >> s;
		int l = s.length();
		for(int j=0;j<l;j++){
			maps[i][j+1] = s[j]-'0';
		}
	}
	for(int i=1;i<=m;i++){
		scanf("%d%d",&u,&v);
		if(!dis[u][v]){
			Bfs(u,v);
		}
		printf("%d\n",dis[u][v]);
	}
	return 0;
}

是联通块写错了吗?

大佬求调ORZ

2024/10/4 22:24
加载中...