描述
题解
除了读取时有些技巧外,其他的没什么值得一提的。
代码
#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;
}