C - 你经历过绝望吗?两次! 【地图型BFS+优先队列(障碍物)】
Input
Output
一个整数,为最少拆毁的障碍物数量,如果不能逃离废墟,输出-1。
Sample Input
3
3 3
###
#@*
***
3 4
####
#@.*
**.*
3 3
.#.
#@#
.#.
Sample Output
1
0
-1
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#define ll long long
#define inf 0x3fffffff
using namespace std;
const int maxn = ;
struct Node
{
int x,y,step;
friend bool operator <(Node a,Node b)
{
return a.step>b.step;
}
};
priority_queue<Node> q;
int n,m;
char a[maxn][maxn];//是char类型!!!
int vis[maxn][maxn];
int d[][]={{,},{-,},{,-},{,}};
int ans;
bool check(int x,int y)
{
if(x< || x>=n || y< || y>=m || vis[x][y] || a[x][y]=='#')//“#”表示不能拆毁的障碍物!!!
return false;
return true;
}
int bfs(int x1,int y1)
{
int ans=-;
while(!q.empty()) q.pop();
vis[x1][y1]=;
q.push( (Node){x1,y1,} );
while(!q.empty())
{
Node u=q.top();
q.pop();
if(u.x==||u.x==n-||u.y==||u.y==m-)//到达目标
//当“猪坚强”通过空地或被拆毁的障碍物移动到废墟边缘时,视作被救出废墟
{
ans=u.step;
break;
}
for(int i=;i<;i++)//遍历4个方向
{
int x=u.x+d[i][];
int y=u.y+d[i][];
if(check(x,y))//检查边界
{
// vis[x][y]=1;
if(a[x][y]=='.')//“.”表示可以直接通过的空地,“*”表示可以拆毁的障碍物
q.push(Node{x,y,u.step});//遇到空地不用付出步数
else
q.push(Node{x,y,u.step+});
vis[x][y]=;
}
}
}
return ans;//如果不能逃离废墟,输出-1 return x
} int main()
{
int t;
scanf("%d",&t);
int x1,y1,x2,y2;
while(t--)
{
scanf("%d%d%",&n,&m);
for(int i=;i<n;i++)
scanf("%s",&a[i]);
memset(vis,,sizeof(vis));
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(a[i][j]=='@')//“@”表示“猪坚强”的位置
{
printf("%d\n",bfs(i,j));
}
}
}
}
return ;
}
C - 你经历过绝望吗?两次! 【地图型BFS+优先队列(障碍物)】的更多相关文章
- CSU 1726: 你经历过绝望吗?两次!(bfs+优先队列)
传送门: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1726 1726: 你经历过绝望吗?两次! Submit Page Summar ...
- CSUOJ 1726 你经历过绝望吗?两次!BFS+优先队列
Description 4月16日,日本熊本地区强震后,受灾严重的阿苏市一养猪场倒塌,幸运的是,猪圈里很多头猪依然坚强存活.当地15名消防员耗时一天解救围困的"猪坚强".不过与在废 ...
- 北漂面试经历(一(两)年工作经验)-- Java基础部分
Java基础部分 常量和变量的区别:final 关键词修饰的变量是恒定不变的,如果还有static关键词修饰的话,常常称为编译期常量.变量,运行时可以修改其引用. Java基本类似有哪些 1 Byte ...
- 代码审计之Catfish CMS v4.5.7后台作者权限越权两枚+存储型XSS一枚
首先本地搭建环境,我所使用的是Windows PHPstudy集成环境.使用起来非常方便.特别是审计的时候.可以任意切换PHP版本. 本文作者:226safe Team – Poacher 0×01 ...
- 【HIHOCODER 1575】 两个机器人(BFS)
描述 一个N × M的2D迷宫中有两个机器人.机器人A在迷宫左上角,只能向右或向下移动:机器人B在迷宫右下角,只能向左或向上移动.机器人不能移动到迷宫外.此外,由于奇怪的同步机制,这两个机器人只能同时 ...
- C/C++代码优化之求两个整型的平均值
在 C/C++ 中, 直接利用 (x + y) >> 1 来计算 \(\left\lfloor {\left( {x + y} \right)/2} \right\rfloor\) (两个 ...
- swap 用指针交换两个整型数值
- c/c++ 判断两个实型的关系
etc. minv=1e-10 or less x>y : x>y-minv x<y : x<y+minv x=y : fabs(x-y)<minv
- Arcgis for Javascript实现两个地图的联动
今天在看天地图的时候,有一个多时相的地图显示功能,感觉很好玩,作为技术控的我晚上十点下班到家便是快十一点了,本来应该是睡觉了,但是,激动地心情不能平静,哎,算了,本着不熬夜的程序员不是好程序员的原则, ...
随机推荐
- 【题解】ZJOI2010贪吃的老鼠
%%%%真的好强...看题解我都看了好久才完全明白.放一下参考的博客,谢谢神犇QAQ 1号博客 2号博客(超级赞的啦) 因为理解的过程太艰辛,所以必须记录一下这道强题:这道题目最难的两个约束就在 ...
- [洛谷P3834] 【模板】可持久化线段树 1(主席树)
题目大意:静态区间第K小 题解:主席树 卡点:无 C++ Code: #include <cstdio> #include <algorithm> #define maxn 2 ...
- Visio中设置自定义属性的值
ShapeSheet中User-Define Cells中Prompt格. 帮助解释为:为用户定义的单元格指定说明性提示或注释.应用程序自动将提示文本用引号 (" ") 引起来,以 ...
- chrome 不支持12px以下字体为题的解决
现英文9px 设置 在chrome 下无效,可以通过 -webkit-transform: scale(0.75); 12*0.75 =9 得到小字体(在chrome浏览器下 大小缩放到0.75倍) ...
- codevs 1078 最小生成树 kruskal
题目描述 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 约翰已经给他的农场安排了一条高速的网络线路,他想把这 ...
- idea初学建立maven项目报错
原理,是因为你没把新创建好的maven项目给设置成一个可被tomcat部署的web项目 参考此博文,讲的非常详细: 归根到底是因为web项目的部署问题: 解决方案:在创建的到时候,idea下部会提示是 ...
- 7月20号day12总结
今天学习过程和小结 先进行了复习,主要 1,hive导入数据的方式有 本地导入 load data [local] inpath 'hdfs-dir' into table tablename; s ...
- ICE学习笔记一----运行官方的java版demo程序
建议新手和我一样,从官网下载英文文档,开个有道词典,慢慢啃. 官方文档下载: http://download.csdn.net/detail/xiong_mao_1/6300631 程序代码就不说了, ...
- DOM遍历查找结点
一.遍历API(2个) 1.深度优先原则遍历NodeIterator 节点迭代器 创建遍历API对象: var iterator=document.createNodeIterator(开始的父节点对 ...
- idea讲web项目部署到tomcat,热部署
idea是自动保存文件的,不需要ctrl+s手动保存. idea使用不习惯,修改了jsp文件后,刷新浏览器并没有立刻显示出来,而是要重新编译一下代码,重新部署才会出现. 在idea tomcat 中s ...