NYOJ-1237-最大岛屿

xiaoxiao2021-02-27  646

ACM模版

描述

题解

除了读取时有些技巧外,其他的没什么值得一提的。

代码

#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN = 505; const int DIR[8][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}; int m, n, t; int tmp; char g[MAXN][MAXN]; void dfs(int x, int y) { tmp++; for (int i = 0; i < 8; i++) { int nx = x + DIR[i][0]; int ny = y + DIR[i][1]; if (nx < 0 || nx >= m || ny < 0 || ny >= n || g[nx][ny] == '0') { continue; } g[nx][ny] = '0'; dfs(nx, ny); } } int main() { cin >> m >> n >> t; for (int i = 0; i < m; i++) { cin >> g[i]; int len = (int)strlen(g[i]); while (len < n) { cin >> (g[i] + len); len = (int)strlen(g[i]); } } int ans = 0, cnt = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (g[i][j] == '1') { g[i][j] = '0'; tmp = 0; cnt++; dfs(i, j); ans = max(ans, tmp); } } } cout << cnt << " " << ans * t << endl; return 0; }
转载请注明原文地址: https://www.6miu.com/read-278.html

最新回复(0)