记录编号 568921 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [入门经典] 黑白图像 最终得分 100
用户昵称 Gravatarlihaoze 是否通过 通过
代码语言 C++ 运行时间 0.122 s
提交时间 2022-02-10 16:23:03 内存使用 2.23 MiB
显示代码纯文本
#include <iostream>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
#define OPEN(_x) freopen(#_x".in", "r", stdin); freopen(#_x".out", "w", stdout)
#define ABS(_x) ((_x)<0?(-(_x)):(_x))
#define fi first
#define se second

using namespace std;

typedef long long ll;
typedef pair<int, int> PII;

const int N = 1010;
int n, cnt = 0;
int dx[] = {0, 1, 1, 1, 0, -1, -1, -1}, dy[] = {1, 1, 0, -1, -1, -1, 0, 1};
bool g[N][N];

inline bool is_valid(int x, int y) { return (x > 0 && y > 0 && x <= n && y<=n); }

void dfs(int x, int y) {
    if(!is_valid(x, y) || !g[x][y]) return;
    g[x][y] = 0;
    for(register int i = 0; i<8; ++i)
        dfs(x+dx[i], y+dy[i]);
}

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    #ifdef DEBUG
    OPEN(test);
    #endif
    OPEN(common);
    cin >> n;
    for(register int i = 1; i<=n; ++i) {
        for(register int j = 1; j<=n; ++j) {
            char tmp; cin >> tmp;
            g[i][j] = (tmp == '1');
        }
    }
    for(register int i = 1; i<=n; ++i)
        for(register int j = 1; j<=n; ++j)
            if(g[i][j]) dfs(i, j), cnt++;
    cout << cnt << '\n';
    return 0;
}