题目大意:给你一个m*n的矩阵,里面有两种符号,一种是 @ 表示这个位置有油田,另一种是 * 表示这个位置没有油田,现在规定相邻的任意块油田只算一块油田,这里的相邻包括上下左右以及斜的的四个方向相邻的位置。要你求出一共有多少块油田。

解题报告:用dfs,我的做法是首先在输入的时候将每个有油田的位置标记为1,否则标记为0,然后枚举每一个点,如果这个点有油田,则以这个点为起点,像周围的八个方向搜索,搜到了相邻的点就标记为2,当然这里也可以标记为0,只要是将已经搜过的点标记掉就是了,当dfs退出到main函数的时候,油田数量加一。

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdlib>
const int MAX = +;
int m,n,map[MAX][MAX],num;
int dire[][] = {{-,},{-,},{,},{,},{,},{,-},{,-},{-,-}};
void dfs(int x,int y) {
if(map[x][y] == ) {
map[x][y] = ;
for(int i = ;i<;++i) {
int xx = x + dire[i][];
int yy = y + dire[i][];
if(xx<||xx>m||yy<||yy>n)
continue;
dfs(xx,yy);
}
}
} int main() {
char c,shu[MAX][MAX];
while(scanf("%d%d",&m,&n),m+n) {
memset(map,,sizeof(map));
for(int i = ;i<=m;++i) {
getchar();
for(int j = ;j<=n;++j) {
scanf("%c",&c);
if(c == '@')
map[i][j] = ;
}
}
int ans = ;
for(int i = ;i<=m;++i)
for(int j = ;j<=n;++j)
if(map[i][j] == ) {
dfs(i,j);
ans++;
}
printf("%d\n",ans);
}
return ;
}

HDU 1241 Oil Deposits DFS搜索题的更多相关文章

  1. HDOJ(HDU).1241 Oil Deposits(DFS)

    HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...

  2. HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  3. HDU 1241 Oil Deposits (DFS/BFS)

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  4. HDU 1241 Oil Deposits (DFS or BFS)

    链接 : Here! 思路 : 搜索判断连通块个数, 所以 $DFS$ 或则 $BFS$ 都行喽...., 首先记录一下整个地图中所有$Oil$的个数, 然后遍历整个地图, 从油田开始搜索它所能连通多 ...

  5. hdu 1241 Oil Deposits(DFS求连通块)

    HDU 1241  Oil Deposits L -DFS Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & ...

  6. HDU 1241 Oil Deposits --- 入门DFS

    HDU 1241 题目大意:给定一块油田,求其连通块的数目.上下左右斜对角相邻的@属于同一个连通块. 解题思路:对每一个@进行dfs遍历并标记访问状态,一次dfs可以访问一个连通块,最后统计数量. / ...

  7. DFS(连通块) HDU 1241 Oil Deposits

    题目传送门 /* DFS:油田问题,一道经典的DFS求连通块.当初的难题,现在看上去不过如此啊 */ /************************************************ ...

  8. HDU 1241 Oil Deposits(石油储藏)

    HDU 1241 Oil Deposits(石油储藏) 00 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)   Probl ...

  9. hdu 1241:Oil Deposits(DFS)

    Oil Deposits Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

随机推荐

  1. openssl证书及配置

    我的环境是:Linux+Apache+MySQL+PHP 1.下载openssl 及相关依赖 #yum install -y openssl 2.进入目录 /etc/pki/tls/certs #cd ...

  2. 《Linux内核分析》第二周笔记 操作系统是如何工作的

    操作系统是如何工作的 一.函数调用堆栈 1.三个法宝 计算机是如何工作的?(总结)——三个法宝(存储程序计算机.函数调用堆栈.中断机制) 1)存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: ...

  3. 实训六(Cocos2dx游戏分享到微信朋友圈----AppID的获取)

    考虑把游戏分享到微信朋友圈,前面的博文已经写到,shareSDK是一个很好的选择,但是学习了几天时间,遇到了很多问题,与其在一棵树上吊死,还不如退一步海阔天空,先暂时放一放,于是我考虑了一下既然是分享 ...

  4. [转帖]Portainer -- Docker可视化管理工具的安装配置及使用

    原贴地址:https://blog.csdn.net/A632189007/article/details/78779920 Portainer介绍 Portainer是Docker的图形化管理工具, ...

  5. OneZero第一次站立会议&Sprint Planning Meeting(2016.3.21)

    会议时间:2016年3月21日 11:40~12:00 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:列举第一周工作内容,确定第一周工作分配.即挑选出一个Story作为本次迭代完成的目标. 会议内容 ...

  6. synchronized、Lock、ReentrantLock、ReadWriteLock

    synchronized:同步锁,是java内置的关键字.当一个线程A执行到被synchronized修饰的方法时,其他线程B如果也要执行这个方法,那么B只能等A执行完方法释放锁后才能获取资源锁执行s ...

  7. 解决Ubuntu14.04下sublime无法输入中文

    原帖地址: (简书作者) http://www.jianshu.com/p/bf05fb3a4709 前言 sublime很好用,但是ubuntu14.04 下不能输入中文,这是一个很大的问题.不知道 ...

  8. 【bzoj1089】严格n元树

    Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d(根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严格 ...

  9. 【bzoj1006】 HNOI2008—神奇的国度

    http://www.lydsy.com/JudgeOnline/problem.php?id=1006 (题目链接) 题意 求弦图的最小染色数. Solution 弦图,详情参见论文. 这里我写的加 ...

  10. angular的一次小错误

    前台页面的错误: 在使用angular的时候,发现了标签等不能解析,忙了一个小时没找见错误在哪,最后才发现,原来ng-app,ng-controller等声明错了地方,声明在了div上,而不是在bod ...