hdu 1241 Oil Deposits(DFS求连通块)
2015-07-28 16:31
513 查看
HDU 1241 Oil Deposits
L -DFSTime Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u
Description
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides the land into numerous square plots. It then analyzes each plot separately, using sensing equipment to determine whether or not the plot contains oil. A plot containing oil is called a pocket. If two pockets are adjacent, then they are part of the same oil deposit. Oil deposits can be quite large and may contain numerous pockets. Your job is to determine how many different oil deposits are contained in a grid.
Input
The input contains one or more grids. Each grid begins with a line containing m and n, the number of rows and columns in the grid, separated by a single space. If m = 0 it signals the end of the input; otherwise 1 <= m <= 100 and 1 <= n <= 100. Following this are m lines of n characters each (not counting the end-of-line characters). Each character corresponds to one plot, and is either `*', representing the absence of oil, or `@', representing an oil pocket.
Output
are adjacent horizontally, vertically, or diagonally. An oil deposit will not contain more than 100 pockets.
Sample Input
1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0
Sample Output
0 1 2 2
一道经典的dfs搜索题,搜索连通块个数
AC代码:
#include<cstdio> #include<cstring> const int maxn=100+5; char pic[maxn][maxn]; int m,n,idx[maxn][maxn]; void dfs(int r,int c,int id) { if(r<0||r>=m||c<0||c>=n) //判定出界 return; if(idx[r][c]>0||pic[r][c]!='@') //不是'@'或者已经访问过的格子 return; idx[r][c]=id; // 连通分量编号 for(int dr=-1; dr<=1; dr++) for(int dc=-1; dc<=1; dc++) if(dr!=0||dc!=0) dfs(r+dr,c+dc,id); } int main() { int i,j; while(scanf("%d%d",&m,&n)==2&&m&&n) { for(i =0; i<m; i++) scanf("%s",pic[i]); memset(idx,0,sizeof(idx)); int q=0; for(i=0; i<m; i++) for(j=0; j<n; j++) if(idx[i][j]==0&&pic[i][j]=='@') dfs(i,j,++q); printf("%d\n",q); } return 0; }
相关文章推荐
- sql语句简单手册
- iOS去除数组的相同元素
- android自定义组件实现方法
- valgrind--still reachable
- (二)OGG双向DML复制操作
- eclipse 快捷键
- 多行文本溢出
- Android5.1--PowerManagerService电源管理
- 经典算法题每日演练——第十题 树状数组
- 经典算法题每日演练——第七题 KMP算法
- mac本地grunt提示:Fatal error: Unable to find local grunt.
- rootwrap模块解析以及功能扩展
- 教你轻松看懂 iOS9 新功能
- js技巧--转义符"\"的妙用
- [转] GDB disassemble
- shell脚本与命定
- JAVA技术实现上传下载文件到FTP服务器(完整)
- 关于构造函数
- MyEclipse 快捷键
- 大数据量的算法面试题