20612统计八连块
2016-06-26 19:01
204 查看
统计八连块
【试题描述】
输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横竖或者对角线方向),就说它们属于同一个八连块。例如,下图中有两个八连块。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/f92af7ec26ed713144be85aae484fd6b.png)
【输入要求】
第一行包括两个正整数m和n,由空格隔开,接下来的m行,每行n个字符,字符只包括“*”和“@”。
【输出要求】
一个数,表示八连块的个数
【输入实例】
【输出实例】
【其他说明】
数据范围:0<m,n<101。LJX出品
【试题分析】
很经典的dfs,老师讲的是:一开始先进入图中,然后找到一个@,从此开始搜,如果不是,退回。这时当时刚刚接触dfs时的题,很简单。
【代码】
【试题描述】
输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横竖或者对角线方向),就说它们属于同一个八连块。例如,下图中有两个八连块。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/30/f92af7ec26ed713144be85aae484fd6b.png)
【输入要求】
第一行包括两个正整数m和n,由空格隔开,接下来的m行,每行n个字符,字符只包括“*”和“@”。
【输出要求】
一个数,表示八连块的个数
【输入实例】
5 5 ****@ *@@*@ *@**@ @@@*@ @@**@
【输出实例】
2
【其他说明】
数据范围:0<m,n<101。LJX出品
【试题分析】
很经典的dfs,老师讲的是:一开始先进入图中,然后找到一个@,从此开始搜,如果不是,退回。这时当时刚刚接触dfs时的题,很简单。
【代码】
#include<iostream> #include<cstring> int mm[101][101],r[101][101]; void lk(int x, int y) { if(!mm[x][y]||r[x][y]) return; r[x][y]=1; lk(x-1,y-1); //周围全搜一遍 lk(x-1,y+1); lk(x+1,y-1); lk(x+1,y+1); lk(x-1,y); lk(x+1,y); lk(x,y-1); lk(x,y+1); } int main() { int n,i,j,m,ans=0; char s[101]; scanf("%d%d",&n,&m); for (i=0;i<n;i++) { memset(s,0,sizeof(s)); scanf("%s",s); for (j=0;j<m;j++)//这里是把整个地图的记录移了一下,从0变成1了 if(s[j]=='@')mm[i+1][j+1]=1; else mm[i+1][j+1]=0; } for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(!r[i][j]&&mm[i][j]) { ans++; lk(i,j); } printf("%d\n",ans); }
相关文章推荐
- HI3520D 音频
- 解释器模式(Interpreter)
- js confirm()方法的用法
- Python学习(4)
- Android-PullToRefresh的用法 及源码中你应该知道的一些东西
- PHP Kohana入门体验教程
- 15.4
- chardet demo
- Python学习(2)
- JavaScript设计模式与开发实践 - 观察者模式
- CTC学习笔记(二) 训练和公式推导
- sql自动生成model的模块
- Python学习(2)
- 好用的ProgressBar 和播放动画的Dialog使用
- 二维数组
- 文件处理
- Python学习(1)
- 子进程
- css制作如平行四边形等图形中角度的角度控制
- 粒子动画