社区讨论

样例一直过不了,求调!!(很急)

P1506拯救oibh总部参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mcmqopan
此快照首次捕获于
2025/07/03 10:01
8 个月前
此快照最后确认于
2025/07/03 10:17
8 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int l,r,vis[505][505],ans;
char a[505][505];
struct stu{
	int x,y;
};
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
void bfs(int x,int y){
	queue<stu> q;
	q.push({x,y});
	vis[x][y] = 1;
	while (!q.empty()){
		x = q.front().x;
		y = q.front().y;
		q.pop();
		for (int i = 0;i < 4;i ++){
			int nx = x + dx[i];
			int ny = y + dy[i];
			if (nx>=1&&nx<=l&&ny>=1&&ny<=r&&vis[nx][ny]==0&&a[nx][ny]=='0'){
				vis[nx][ny] = 1;
				q.push ({nx,ny});
			}
		}
	}
}
int main(){
	cin >> l >> r;
	for (int i = 1;i <= l;i ++){
		for (int j = 1;j <= r;j ++){
			cin >> a[i][j];
		}
	}
	for (int i = 1;i <= l;i ++){
		for (int j = 1;j <= r;j ++){
			if (a[i][j] == '0'){
			//	vis[i][j] = 1;
				bfs(i,j);
			}
		}
	}
	for (int i = 1;i <= l;i ++){
		for (int j = 1;j <= r;j ++){
			if (a[i][j] == '0' && vis[i][j] == 0){
				ans ++;
			}
		}
	}
//	cout << endl;
//	for (int i = 1;i <= l;i ++){
//		for (int j = 1;j <= r;j ++){
//			cout << vis[i][j] << ' ';
//		}
//		cout <<endl;
//	}
//	cout << endl;
	cout << ans;
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...