#include<stdio.h> int fx[4] = { 0,1,0,-1 }, fy[4] = { 1,0,-1,0 }, n, m, map[51][51], check[51][51], cnt, data[2501], max, max2; void dfs(int i, int j, int k) { check[i][j] = cnt; data[cnt]++; if (k<8 && check[i + 1][j] == 0) { dfs(i + 1, j, map[i + 1][j]); } else if (k >= 8) { k -= 8; } if (k<4 && check[i][j + 1] == 0) { dfs(i, j + 1, map[i][j + 1]); } else if (k >= 4) { k -= 4; } if (k<2 && check[i - 1][j] == 0) { dfs(i - 1, j, map[i - 1][j]); } else if (k >= 2) { k -= 2; } if (k == 0 && check[i][j - 1] == 0) { dfs(i, j - 1, map[i][j - 1]); } } int main() { int i, j, k; scanf("%d%d", &m, &n); for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { scanf("%d", &map[i][j]); } } for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { if (check[i][j] == 0) { ++cnt; dfs(i, j, map[i][j]); if (data[cnt]>max2) { max2 = data[cnt]; } } } } for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { for (k = 0; k<4; k++) { if (check[i][j] != check[i + fx[k]][j + fy[k]] && max<data[check[i][j]] + data[check[i + fx[k]][j + fy[k]]]) { max = data[check[i][j]] + data[check[i + fx[k]][j + fy[k]]]; } } } } printf("%d\n%d\n%d", cnt, max2, max); return 0; }
2234번: 성곽
https://www.acmicpc.net/problem/2234
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기