题目
在第一次植物僵尸世界大战中,植物国的黑玫瑰王子使用了植物国的超超超超级无敌禁术-----”BUG”,开启了异次元的大门,在一位超超超超…级的指挥官”辅助器”带领下,打败了僵尸王国,但是也因此植物国大伤元气,无法再得到异次元的帮助。过了10000年后,僵尸国王子为了国家的荣誉和发扬祖先的”诺克萨斯”精神,打算采取”闪电战”战术,一举歼灭植物国的战略要塞,吹起第二次植物僵尸世界大战的号角,但是僵尸王子需要知道植物国现在有几个战略要塞,才能采取进一步措施,于是开始研究植物国的军事图。
因为僵尸国卫星技术先进,该军事图十分清楚明了,是一个二维的电子网格图,图中只有黑色和白色,只要图中的白色方块外一圈的八个方块中有白色方块,说明它们属于同一个战略要塞。Input多组输入(m = 0结束输入)。
军事图是m*n的二维图,图中”@”表示白色,”s”表示黑色。
第一行包含m,n(1<=n,m<=100),
接下来m行,每行n个字符。Output对于每组输入,输出植物国的战略要塞数量。
Sample Input
1 1
s
3 5
s@s@s
s@s
s@s@s
1 8
@@ssss@s
5 5
ssss@
s@@s@
s@ss@
@@@s@
@@ss@
0 0
Sample Output
0
1
2
2


我们对每个可能‘@’进行广搜,八个方向,是否在同一区域内,通过ans 、pre进行标记

细节看代码
ac代码

#include<iostream>
#include<cstdio>
#include<queue>
#include<string.h>
#include<string>
#include<algorithm>
#define inf 0x3f3f3f3f
#include<map>
using namespace std;
typedef struct
{int x,y;int ans;     //当前节点编号int pre;    //其父节点编号
}status;
char mp[105][105];
int vis[105][105];      //访问标记
int op[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};  //八个方向操作
int n,m;
int bfs(vector<status> &fa,map<pair<int ,int >,int > ans)
{memset(vis,0,sizeof(vis));for(int i=0;i<fa.size();i++){if(fa[i].ans==fa[i].pre)    //当两个节点不在一个块内的时后进行广搜{queue<status > q;q.push(fa[i]);while(!q.empty()){status tp;tp = q.front();vis[tp.x][tp.y] = 1;q.pop();for(int i=0;i<8;i++){int dx = tp.x + op[i][0];int dy = tp.y + op[i][1];if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy]&&mp[dx][dy]=='@'){fa[ans[make_pair(dx,dy)]].pre = tp.ans;     //在同一个区域 将其节点指向父节点vis[dx][dy] = 1;status New;New = fa[ans[make_pair(dx,dy)]];q.push(New);}}}}}int count = 0;for(int i=0;i<fa.size();i++)        //计算块数{if(fa[i].ans==fa[i].pre)count++;    }return count;
}
int main()
{while(~scanf("%d%d",&n,&m)){if(n==0&&m==0) break;vector<status> fa;          //存放'@'   节点map<pair<int ,int >,int >   ans;    //用作x,y索引   fa内的节点int cnt =0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf(" %c",&mp[i][j]);if(mp[i][j]=='@'){status New;New.x = i;New.y = j;New.ans = cnt;New.pre = cnt;fa.push_back(New);ans[make_pair(i,j)] = cnt;cnt++;}}printf("%d\n",bfs(fa,ans));}return 0;
}

Oil Deposits HDU - 1241 并查集思想 + bfs搜索相关推荐

  1. L - Oil Deposits HDU - 1241

    L - Oil Deposits HDU - 1241 注意写check的时候要先判x,y是不是越界了,不然直接用数组可能RE, 也可能直接WA了 #include<cstdio> #in ...

  2. hdu 5606(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5606 解题思路: 这题实际上是要找一些连通的节点,使得边上的权值都为0. 很明显,首先把权值为0的边都 ...

  3. hdu 2473(并查集+删除操作)

    解题思路:这道题有并查集的删除操作,如果直接对这一棵树进行删除节点操作肯定是很困难的.所以可以建立虚拟节点,只要有一个节点要被删除,就直接把它投影到虚拟节点上,即用这个虚拟节点来代替我们要删除的节点. ...

  4. HDU 5441并查集 by cyl

    HDU 5441 题意: ​ 杰克喜欢旅游,从城市a到城市b是他最喜欢的,现在有n个城市m个路. ​ 当杰克在从城市a到城市b 的时候需要坐车,但是需要有等待时间t,他无法忍受超过x 的等待时间. ​ ...

  5. hdu 1232 并查集

    并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了.以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定.不分享出来真是对不起party了.(party:我靠,关我嘛事啊?我跟你很熟么?) ...

  6. hdu 4907(并查集)

    Task schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Pr ...

  7. hdu 3172(并查集+hash)

    解题思路:典型的并查集,只是每个人的名字要转换成数字,可以用map,也可以用字典树,我最开始用的字典树结果爆内存了.. 爆内存: #include<iostream> #include&l ...

  8. hdu 3081(并查集+最大流)

    题目大意: n个男孩n个女孩,女孩选男孩,每个女孩都要选到不同的人 k对女孩有相同选择标准, 女孩每轮都选择没选过的男孩, 问总共能选几轮.解题思路:女孩编号1......n,男孩编号n+1,n+2, ...

  9. hdu 5441 (并查集)

    题意:给你n个点,m条边构成无向图.q个询问,每次一个值,求有多少条路,路中的边权都小于这个值 a->b 和 b->a算两种 思路:把权值从小到大排序,询问从小到大排序,如果相连则用并查集 ...

最新文章

  1. http 安全性和幂等性_HTTP方法:幂等性和安全性
  2. HTML 页面源代码布局介绍
  3. mybatis框架执行原理简单实现
  4. MySQL redis如何实现_如何保障mysql和redis之间的数据一致性?(转发)
  5. 第三章 选择结构
  6. C#网络编程----文件流
  7. mysql数据封装是什么_MySql数据封装操作类
  8. 天玑9000和骁龙8 gen1哪个好 天玑9000和骁龙8 gen1差距
  9. 看一遍都懂的数组遍历~确定不试试?
  10. 蚂蚁庄园运动会登山赛!3d项目入门实战!Cocos Creator 3D!
  11. Linux云计算学习笔记day39
  12. K3+note+android+6.0,联想k3note升级Android 6.0教程[多图]
  13. python项目——外星人入侵游戏
  14. PHP语言之面向对象编程
  15. Matlab-mex
  16. 在python中使用opencv自带函数转换转换RBG和BGR
  17. Maven3 Archetype ArtifactId大全及简单说明
  18. 根据交换机端口分配固定地址的方法
  19. 短信中出现的短网址有危险吗?
  20. 电阻、电容、电感的高频特性

热门文章

  1. 微信小程序 - 蓝牙BLE小程序开发
  2. volatile关键字对编译器优化的影响
  3. 天然场景文本检测识别技术综述
  4. 使用Rundll32.exe和Rundll.exe
  5. js中的var是什么意思
  6. Python中and和or运算符的高级用法
  7. MySQL查询某个列中相同值的数量统计
  8. vue 微信授权解决方案
  9. 2019写给对象的话_2019@对象的暖心说说简短的 适合艾特对象的说说一句话超甜...
  10. 拍照翻译的软件有什么?不妨试试这几款好用的软件