城堡問題 OpenJ_Bailian - 2815

傳送門

代碼:

#include<stdio.h>
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
int n, m,sum=0,number;
int a[60][60], color[60][60];
bool hh(int x, int y) {
	return (x >= 0 && x < n && y >= 0 && y < m && color[x][y] == 0);
}
void DFS(int x, int y) {
	if (!hh(x, y))return;
	color[x][y] = number; sum++;
	if ((a[x][y] & 1) == 0)DFS(x, y - 1);
	if ((a[x][y] & 2) == 0)DFS(x - 1, y);
	if ((a[x][y] & 4) == 0)DFS(x, y + 1);
	if ((a[x][y] & 8) == 0)DFS(x + 1, y);
}
int main() {
	while (~scanf("%d %d", &n, &m)) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				scanf("%d", &a[i][j]);
				color[i][j] = 0;
			}
		}
		int maxn = 0;
		number = 0; sum = 0;
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				if (color[i][j] == 0) {
					sum = 0;
					number++;
					DFS(i, j);
					maxn = maxn < sum ? sum : maxn;
				}
			}
		}
		printf("%d\n%d\n", number , maxn);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章