hdu 1241
来源:互联网 发布:淘宝网老版本下载安装 编辑:程序博客网 时间:2024/06/07 12:54
问题描述
GeoSurvComp地质调查公司负责检测地下石油资源。GeoSurvComp发现一个大矩形区域的土地,并创建一个网格,将土地划分为许多块地。然后分别分析每一块土地,使用传感设备来确定是否包含石油。一块含有石油的土地被称为油地。如果相邻的油地,那么它们是同一油地的一部分。石油资源可能很大,可能包含众多的油地。你的工作是确定有多少不同的油地都包含在一个网格。
输入
输入文件包含一个或多个样例。每个样例的第一行包含m和n,网格中的行和列的数量,由一个空格隔开。如果m = 0,表示输入结束,否则1<=m,n<=100。随后是m行字符,每行字符有n列。每个字符对应一块土地,要么是“*”,表示没有石油,或“@”,代表油地。
输出
对于每一个样例,输出不同的油地的数量。如果两块油地垂直,水平,倾斜着相邻,算作同一块油地。所有的油地数量不超过100个。
样例输入
1 1*3 5*@*@***@***@*@*1 8@@****@*5 5 ****@*@@*@*@**@@@@*@@@**@0 0
样例输出
0122
题目是直接用有道在线翻译的,比较生硬。
这道题是标准的图论搜索题,用DFS可解
代码如下
#include<cstdio>#include<cstring>char a[105][105];bool c[105][105];int dir[8][2]={{1,1},{1,-1},{0,1},{0,-1},{-1,1},{-1,-1},{1,0},{-1,0}};dfs(int i,int j,int m,int n){int k,di,dj;for(k=0;k<8;k++){di=dir[k][0]+i;dj=dir[k][1]+j;if(di>=0&&di<m&&dj>=0&&dj<n&&a[di][dj]=='@'&&!c[di][dj]){c[di][dj]=true;dfs(di,dj,m,n);}}}int main(){int m,n,i,j,num;while(scanf("%d %d",&m,&n)&&m&&n){getchar();for(i=0;i<m;i++){for(j=0;j<n;j++){scanf("%c",&a[i][j]);}getchar();}memset(c,0,sizeof(c));num=0;for(i=0;i<m;i++){for(j=0;j<n;j++){if(a[i][j]=='@'&&!c[i][j]){c[i][j]=true;dfs(i,j,m,n);num++;}}}printf("%d\n",num);}}
0 0
- hdu 1241
- HDU 1241
- hdu 1241
- hdu 1241
- hdu 1241
- hdu 1241
- hdu-1241
- hdu 1241
- hdu 1241
- HDU 1241
- hdu 1241
- hdu-1241
- hdu 1241
- HDU(1241)
- hdu 1241
- Hdu 1241
- hdu 1241
- HDU 1241
- Java内存可见性-synchronized和volatile
- docker学习笔记1
- 基于Docker的TensorFlow机器学习框架搭建和实例源码解读
- [Coursera 计算导论与C语言基础] 第七周作业
- classpath 和 classpath* 区别:
- hdu 1241
- 生产者和消费者问题详解
- luogu2155沙拉公主的困惑(第二次做)
- java中组合的应用(不相干的类共同完成一个功能)+构造器回顾。
- 工作日志20170217
- ubuntu caffe cuda
- [LeetCode]7. Reverse Integer
- jquery 插件写法
- Servlet小结