算法竞赛入门经典 第六章 黑白图像
2014-06-07 17:28
211 查看
输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数。如果两个黑格子有公共边或者公共顶点,就说他们属于同一个八连块。
样例输入:
6
100100
001010
000000
110000
111000
010100
样例输出:
3
遍历每一块黑色格子,以这块黑色格子为中心向四周搜索,如果被访问过则停止搜索(即vis[i][j]=1)。
样例输入:
6
100100
001010
000000
110000
111000
010100
样例输出:
3
遍历每一块黑色格子,以这块黑色格子为中心向四周搜索,如果被访问过则停止搜索(即vis[i][j]=1)。
#include <stdio.h> #include <memory.h> #include <string.h> int mat[100][100],vis[100][100]; char s[100]; void dfs(int i,int j) { if(vis[i][j]||mat[i][j]==0) return ; vis[i][j]=1; dfs(i-1,j-1);dfs(i-1,j);dfs(i-1,j+1); dfs(i,j-1); dfs(i,j+1); dfs(i+1,j-1); dfs(i+1,j);dfs(i+1,j+1); } int main (void) { // freopen("黑白图像.txt","r",stdin); int i,j,n,count; while(scanf("%d",&n)!=EOF) { memset(mat,0,sizeof(mat)); memset(vis,0,sizeof(vis)); count=0; for(i=1;i<=n;i++) { scanf("%s",s); for(j=1;j<=n;j++) { mat[i][j]=s[j-1]-'0'; } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(mat[i][j]&&vis[i][j]==0) { count++; dfs(i,j); } } } printf("%d\n",count); } return 0; }
相关文章推荐
- 算法竞赛入门经典:第六章 数据结构基础 6.10黑白图像
- 算法竞赛入门经典第六章
- 算法竞赛入门经典:第六章 数据结构基础 6.9 根据二叉树的后序和中序确定前序序列
- 算法竞赛入门经典:第六章 数据结构基础 6.11迷宫
- 算法竞赛入门经典:第六章 数据结构基础 6.3移动小球
- 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第六章 2(Binary Trees)
- 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第六章 1(Lists)
- 算法竞赛入门经典 第六章层次遍历
- 算法竞赛入门经典:第六章 数据结构基础 6.5小球下落
- 算法竞赛入门经典:第六章 数据结构基础 6.14欧拉回路
- 算法竞赛入门经典第六章例题6-3 Matrix Chain Multiplication UVA - 442
- 算法竞赛入门经典第六章例题6-7 Trees on the level UVA - 122
- 算法竞赛入门经典:第六章 数据结构基础 6.2铁轨
- 算法竞赛入门经典:第六章 数据结构基础 6.12迷宫路径
- 算法竞赛入门经典 第六章 二叉树重建
- 算法竞赛入门经典 1.1 算术表达式
- 算法竞赛入门经典 例题8-1
- 算法竞赛入门经典 1.1 算术表达式
- 算法竞赛入门经典 2.1 for 循环
- 算法竞赛入门经典 2.1 for 循环