C++题解(32) 2025顺德一中少科院信息学创新班(四期)考核复盘 U536935 黑白图像
(本人已参加该考核)
题目背景
输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数。如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块。
如下图所示的图形有3个八连块。
题目描述
无
输入格式
第1行输入一个正整数n(n≤700),此后输入n行,每行是由n个0或1组成的字符串。
输出格式
输出八连快的个数
输入输出样例
输入 #1
6 100100 001010 000000 110000 111000 010100
输出 #1
3
参考答案
#include <iostream> using namespace std; char a[705][705]; int n, sum; void dfs(int x, int y) { if (x < 1 || x > n || y < 1 || y > n) return; if (a[x][y] != '1') return; a[x][y] = '0'; for(int dx = -1; dx <= 1; dx++) { for(int dy = -1; dy <= 1; dy++) { dfs(x + dx, y + dy); } } } int main() { cin >> n; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { cin >> a[i][j]; } } for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(a[i][j] == '1') { dfs(i, j); sum++; } } } cout << sum; return 0; }