越改越低不离谱吗?
查看原帖
越改越低不离谱吗?
398025
忘笙楼主2021/7/8 20:06

可恶,普及组题都不会做了,今天NOIp干脆不参加了(

#include <iostream>
#include <cstdio>

using namespace std;

const int SIZE = 105;
int n, m;
int a[SIZE][SIZE];
int f[SIZE][SIZE];
int cnt = 0;
int d[10][10] = {
	{0,0},
	{1,0},
	{-1,0},
	{0,1},
	{0,-1}
};

void dfs(int i, int j) {
	if (i>n || i<0 || j<0 || j>m) return;
	if (a[i][j] == 0) {
		f[i][j] = 0;
		return;
	}
	bool flag = 0;
	for (int k = 1; k <= 8; ++k){
		if (f[i+d[k][0]][j+d[k][1]] != 0) {
			f[i][j] = f[i+d[k][0]][j+d[k][1]];
			flag = 1;
		}
	}
	if (flag == 0) f[i][j] = ++cnt;

	return ;
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= m; ++j){
		    char ch;
			ch = getchar();
			if (isdigit(ch)) {
				a[i][j] = ch-'0';
			}
			if (ch == '\n') {
				ch = getchar();
				a[i][j] = ch-'0';
			}
			}
	}
	
	for (int A = 1; A <= n; ++A) {
		for (int B = 1; B <= m; ++B){
			dfs(A, B);
			//printf("%d ",f[A][B]);
			}
			//cout << endl;
	}
	cout << cnt;
}
2021/7/8 20:06
加载中...