| 比赛 | 
    板子大赛 | 
    评测结果 | 
    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;
}