pku1562 Oil Deposits 油田合并(简单深搜)
2013-04-09 20:02
204 查看
题意:N*M的图中有一些'@',从该位置往四周8个位置延伸,求共有多少块互不连通的‘@’构成的块?简单的dfs便能搞定。。。
输入:
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
输出:
0
1
2
2
代码:
输入:
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
输出:
0
1
2
2
代码:
#include<iostream> using namespace std; char map[101][101]; //定义地图 map[][],标记油田状况 int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}}; //搜索8个方向 int n,m,num; //表示输入的地图有n行m列 //深度优先搜索 int dfs(int x,int y) { int a,b,k; map[x][y]='*'; //访问过的都由@改为*,剪枝 for(k=0;k<8;++k) { a=x+dir[k][0]; b=y+dir[k][1]; if(a<n&&a>=0&&b<m&&b>=0&&map[a][b]=='@') dfs(a,b); } return 1; //每次递归都返回1,最后表示有多少连通块 } int main() { int i,j; while(cin>>n>>m) { if(n==0) break; num=0; for(i=0;i<n;++i) cin>>map[i]; for(i=0;i<n;++i) for(j=0;j<m;++j) if(map[i][j]=='@') num+=dfs(i,j); cout<<num<<endl; } return 0; }
相关文章推荐
- POJ 1562 && ZOJ 1709 Oil Deposits(简单DFS)
- poj1562 Oil Deposits 简单搜索,dfs和bfs都行,我用的bfs
- poj 1562 Oil Deposits (广搜,简单)
- POJ 1562 Oil Deposits (简单深搜)
- poj 1562 Oil Deposits 简单dfs
- pku2386 Lake Counting 数湖(简单深搜)
- 把C#程序(含多个Dll)合并成一个Exe的超简单方法
- 【POJ 1562】 Oil Deposits
- pku 2392 Space Elevator(简单背包)
- 合并同列多行数据为一字符串的最简单方法
- [luogu]P1090合并果子-插入排序的简单应用
- poj 1562 Oil Deposits
- 简单的Sql多行数据合并示例
- SVN分支和合并的简单例子
- 两个表无任何关联,简单合并
- POJ-1562 Oil Deposits
- 短文本合并重复(去重)的简单有效做法
- hdu 油田合并
- pku 2750 鸡兔同笼 简单的计算
- pku 1164 解题报告 简单的深度优先搜索