1011
来源:互联网 发布:smartdraw mac 破解版 编辑:程序博客网 时间:2024/06/05 06:26
题意:如果相邻的两个小油田,那么它们是同一油田的一部分。石油资源可能很大,可能包含众多的小油田。确定有多少不同的油田都包含在一个网格,探索油田的数量,用@表示存在油田,*表示不存在油田,如果两个油田相邻,则将这两个看成一个油田,计算油田的数量
思路:显然这道题是用深度优先搜索算法进行解答,建一个标记数组和一个保存油田信息的数组,创建完以后使用深度优先搜索算法,每次访问完成后进行标记,以防止重复搜索,得到最终答案截止
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 200;
char dep[maxn][maxn];
int id[maxn][maxn];
int row, col;
void dfs(int r, int c, int num) {
if(r >= row || r < 0 || c >= col || c < 0) return;
if(dep[r][c] != '@' || id[r][c] != 0) return;
id[r][c] = num;
for(int i = -1; i <= 1; i++)
for(int j = -1; j <= 1; j++)
if(i != 0 || j != 0) dfs(r + i, c + j, num);
}
int main()
{
while(scanf("%d%d", &row, &col) == 2 && row && col) {
for(int i = 0; i < row; i++)
scanf("%s", dep[i]);
int num = 0;
memset(id, 0, sizeof(id));
for(int i = 0; i < row; i++)
for(int j = 0; j < col; j ++) {
if(id[i][j] == 0 && dep[i][j] == '@') dfs(i, j, ++num);
}
printf("%d\n", num);
}
return 0;
}
- 1011
- 1011
- 1011
- 1011
- 1011
- 1011
- 1011
- 1011
- 1011
- [1011-
- 1011
- 1011
- 1011
- 1011
- 1011
- 1011
- 1011
- 1011
- activity启动模式
- 网页显示QQ在线点击弹出聊天对话框代码
- hdu 3397 线段树双标记
- 5.Maximum Product Subarray-Leetcode
- 对时间的时分秒分别加上n
- 1011
- WebView的用法
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- HDU 5666 Segment——BestCoder Round #80
- Android API Guides---Menus
- SpringMVC 数据绑定
- 新iOS系统如何允许加载HTTP链接
- Animation制作动画组件效果
- 0x00 OD调试技巧汇总