比赛 板子大赛 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 黑白图像 最终得分 100
用户昵称 zhm 运行时间 0.426 s
代码语言 C++ 内存使用 3.15 MiB
提交时间 2025-01-22 10:39:00
显示代码纯文本
#include <cstdio>

const int N = 700;
int n;

bool mat[N+5][N+5];
int tim, vis[N+5][N+5];

const int dx[8] = {0,  0, 1,  1, 1, -1, -1, -1};
const int dy[8] = {1, -1, 1, -1, 0,  1, -1,  0};

void dfs(int x, int y)
{
    vis[x][y] = tim;
    for (int d = 0; d < 8; d++) {
		int nx = x + dx[d];
		int ny = y + dy[d];
		if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && mat[nx][ny] && !vis[nx][ny])
		   dfs(nx, ny);
	}
}

int main(void)
{
	freopen("common.in", "r", stdin);
	freopen("common.out", "w", stdout);
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			scanf("%1d", &mat[i][j]);
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			if (mat[i][j] && !vis[i][j]) {
   			    tim++;
			    dfs(i, j);
    		}
	printf("%d\n", tim);
	fclose(stdin);
	fclose(stdout);
    return 0;
}