黑白图像

来源:互联网 发布:核循环项目 知乎 编辑:程序博客网 时间:2024/04/29 10:39

输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数。如果两个黑格子有公共边或者有公共顶点,就说它们属于同一个八连块。

如下图所示,八连块的个数为3。










代码如下:

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using namespace std;int FMAX[1010][1010];int visit[1010][1010];void DFS(int m, int n) //遍历与它相邻的八个方块{if(visit[m][n] || !FMAX[m][n]) return ;else{visit[m][n] = 1;DFS(m - 1, n - 1); DFS(m - 1, n); DFS(m - 1, n + 1);DFS(m, n - 1); DFS(m, n + 1);DFS(m + 1, n - 1); DFS(m + 1, n); DFS(m + 1, n + 1);}}int main(){int n, count = 0;scanf("%d", &n);memset(FMAX, 0, sizeof(FMAX));memset(visit, 0, sizeof(visit));for(int i = 1; i <= n; ++i)for(int j = 1; j <= n; ++j)scanf("%d", &FMAX[i][j]);for(int i = 1; i <= n; ++i)for(int j = 1; j <= n; ++j)if(!visit[i][j] && FMAX[i][j]){count++;DFS(i, j);}printf("%d\n", count);}


原创粉丝点击