黑白图像(入门DFS)
2012-02-21 15:01
211 查看
输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数。如果两个黑格子有公共边或者有公共顶点,就说它们属于同一个八连块。
如下图所示,八连块的个数为3。
即输入为:
6
1 0 0 1 0 0
0 0 1 0 1 0
0 0 0 0 0 0
1 1 0 0 0 0
1 1 1 0 0 0
0 1 0 1 0 0
输出
3
如下图所示,八连块的个数为3。
即输入为:
6
1 0 0 1 0 0
0 0 1 0 1 0
0 0 0 0 0 0
1 1 0 0 0 0
1 1 1 0 0 0
0 1 0 1 0 0
输出
3
#include <stdio.h> #include <string.h> #define MAX 1000+10 char mat[MAX][MAX], vis[MAX][MAX]; void dfs(int x, int y) //mat[][]存图像,1代表黑; vis[][]标记是否访问过这个格子 { if (!mat[x][y] || vis[x][y]) { return; } vis[x][y] = 1; //标记此点访问过 dfs(x-1, y-1); dfs(x-1, y); dfs(x-1, y+1); //递归访问周围8个点 dfs(x, y-1); dfs(x, y+1); dfs(x+1, y-1); dfs(x+1, y); dfs(x+1, y+1); } int main(void) { memset(mat, 0, sizeof(mat)); memset(vis, 0, sizeof(vis)); int i, j, n, cnt = 0; scanf("%d", &n); for (i=1; i<=n; i++) { for (j=1; j<=n; j++) { scanf("%d", &mat[i][j]); } } for (i=1; i<=n; i++) { for (j=1; j<=n; j++) { if (mat[i][j] && !vis[i][j]) //找没访问过的黑格 { cnt++; dfs(i, j); } } } printf("%d\n", cnt); return 0; }
相关文章推荐
- 黑白图像(DFS)
- 黑白图像问题[DFS]
- 黑白图像-入门级深搜
- NOJ1102黑白图像——深度搜索DFS
- 黑白图像-入门级深搜
- ACM:图的DFS,黑白图像
- 入门经典-6.3树和二叉树-4非二叉树-uva297四分树-先序遍历,黑白图像⭐⭐⭐⭐⭐难度:2
- HDU 1241 Oil Deposits(八连块问题) 与 黑白图像(刘汝佳的小白6.4.1)同样的原理(DFS)
- 图的遍历——黑白图像——深度优先搜索(DFS)
- NOJ 1102 黑白图像 (裸DFS)
- 简单典型DFS---(解题报告)NOJ1102---黑白图像
- 黑白图像(DFS)
- 算法竞赛入门经典:第六章 数据结构基础 6.10黑白图像
- 算法竞赛入门经典 第六章 黑白图像
- 黑白图像(DFS)
- DFS入门
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- 搜索入门(DFS)-Lake Counting(积水连通问题)
- OpenCV入门学习(一)图像放缩【简单的按比例放缩,无技术含量】
- Mat - 基本图像容器(OPencv 入门必看)