样例过了,但WA了
查看原帖
样例过了,但WA了
729338
xihegudiiakioi楼主2024/5/11 17:56
#include <bits/stdc++.h>
using namespace std;

int const MAXN = 250;
int n,m;
int ans = 0;
int a[MAXN + 10][MAXN + 10];
bool b[MAXN + 10][MAXN + 10];
int fx[5] = {0,1,0,-1,0};
int fy[5] = {0,0,1,0,-1};
int sum = 0;
int t[70000];

void dfs(int x,int y) {
	sum++;
	b[x][y] = true;
	for(int i = 1; i <= 4; i++) {
		int tx = x + fx[i];
		int ty = y + fy[i];
		if(b[tx][ty] == false && a[tx][ty] == 1 && tx >= 1 && tx <= n && ty >= 1 && ty <= m) {
			dfs(tx,ty);
		}
	}
}
int main() {
	while(1) {
		cin >> n >> m;
		if(n == 0 && m == 0) {
			return 0;
		}
		for(int i = 1; i <= n; i++) {
			for(int j = 1; j <= m; j++) {
				cin >> a[i][j];
			}
		}
		for(int i = 1; i <= n; i++) {
			for(int j = 1; j <= m; j++) {
				if(!b[i][j] && a[i][j] == 1) {
					dfs(i,j);
					ans++;
					t[sum]++;
					sum = 0;
				}
			}
		}
		cout << ans << endl;
		for(int i = 1; i <= 65000; i++) {
			if(t[i]) {
				cout << i << " " << t[i] << endl;
			}
		}
	}
}
2024/5/11 17:56
加载中...