CSU 1726-你经历过绝望吗?两次!(BFS+剪枝)
Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu
Description
Input
Output
一个整数,为最少拆毁的障碍物数量,如果不能逃离废墟,输出-1。
Sample Input
3 3 3 ### #@* *** 3 4 #### #@.* **.* 3 3 .#. #@# .#.
Sample Output
1 0 -1
题意:
找出一条最短的路出到边界。
思路:
这题一开始以为不会超时,结果写完给你一个TLE,最后想到,bfs是以次数为关键的,而且之所以超时是因为我拓展的枝条太多了,而且有些路是重复走的,所以记录一下每个地方最快到达就行了,如果大于最小值,我不如直接在最小值拓展,还用你绕路走的路吗。
AC代码:
#include<iostream>
#include<set>
#include<map>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int INF=0x3f3f3f3f;
typedef long long LL;
const int N=100000+1000;
#define T 100+50
int r,c,ans,tarx,tary;
char s[T][T];
int fx[][2] = {{1,0},{0,1},{-1,0},{0,-1}};struct node
{int x,y,cnt;node(){}node(int _1,int _2,int _3):x(_1),y(_2),cnt(_3){}bool operator<(const node& b)const{return cnt>b.cnt;}
};
priority_queue<node> q;void BFS()
{map< pair<int,int>,int > mp;while(!q.empty())q.pop();q.push(node(tarx,tary,0));mp[make_pair(tarx,tary)] = 0;node p;while(!q.empty()){p = q.top();q.pop();if(p.x==0||p.x==r-1||p.y==0||p.y==c-1){ans = p.cnt;break;}for(int i=0;i<4;++i){int tx=p.x+fx[i][0],ty=p.y+fx[i][1];bool flag = false;pair<int,int> pir(tx,ty);if(tx>=0&&tx<r&&ty>=0&&ty<c&&s[tx][ty]!='#'){int tmp = 0;if(mp.count(pir)!=0)flag=true;if(s[tx][ty]=='*')tmp++;if(mp[pir]>p.cnt+1||!flag)q.push(node(tx,ty,p.cnt+tmp)),mp[pir]=p.cnt+tmp;}}}
}int main()
{
#ifdef cdzscfreopen("in.txt","r",stdin);
#endifint n,m,i,j,k;scanf("%d",&n);while(n--){ans = INF;scanf("%d%d",&r,&c);for(i=0;i<r;++i){for(j=0;j<c;++j){scanf(" %c",&s[i][j]);if(s[i][j]=='@'){tarx = i;tary = j;}}}BFS();if(ans==INF)ans=-1;printf("%d\n",ans);}return 0;
}
CSU 1726-你经历过绝望吗?两次!(BFS+剪枝)相关推荐
- CSU 1726: 你经历过绝望吗?两次!
题目传送门 平常不是很喜欢用 cin 和 cout 的,但是不知道为什么 scanf 就W了,cin 就 A了 ,应该是数据格式问题吧 代码: #include<cstdio> #incl ...
- CSUOJ 1726 你经历过绝望吗?两次!(BFS + 优先队列)
1726: 你经历过绝望吗?两次! Description 4月16日,日本熊本地区强震后,受灾严重的阿苏市一养猪场倒塌,幸运的是,猪圈里很多头猪依然坚强存活.当地15名消防员耗时一天解救围困的&qu ...
- CSU 1726:你经历过绝望吗?两次! (BFS+优先队列)
你经历过绝望吗?两次! Time limit:1000 ms Memory limit:131072 kB OS:Windows Problem Description 4月16日,日本熊本地区强震后 ...
- UVa 11624,两次BFS
题目链接:http://vjudge.net/contest/132239#problem/A 题目链接:https://uva.onlinejudge.org/external/116/11624. ...
- Fire!——两个BFS
[题目描述] [题目分析] 看到题目后很清楚是两个BFS,可是我觉得对于火的BFS可以转换成判断,我的做法是将火的位置全部记录下来,然后判断某个位置距离每个火的步数是否小于当前步数,可是错了,还不清楚 ...
- 2152 Balloons(两遍bfs求图的连通块)
2152 Balloons(两遍bfs求图的连通块) Problem Description Both Saya and Kudo like balloons. One day, they heard ...
- csu1726 你经历过绝望吗?两次!
4月16日,日本熊本地区强震后,受灾严重的阿苏市一养猪场倒塌,幸运的是,猪圈里很多头猪依然坚强存活.当地15名消防员耗时一天解救围困的"猪坚强".不过与在废墟中靠吃木炭饮雨水存活3 ...
- 你经历过绝望吗?两次!
2个注意, 一个是优先级重写.利用,里面没有引用,然后是左大于右就排在后面. bool operator<(mynode ne1, mynode ne2) { return ne1.cost & ...
- 编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?
本文来说说在编译spring-springframework-5.0.x的路上,小编我到底经历了什么? 如果正在看文章你,恰好也想要研究spring源码,那么请先做好准备再动手,不然迎来的问题如滔滔江 ...
最新文章
- kafka高可用(集群)
- 计算机怎么模拟人,计算机能不能模拟人的思维?
- javascript一句话技巧
- 学习这么美丽的事,你要不要和我一起?
- 暑假集训做题,比赛的网站
- 阿里6年,我的技术蜕变之路!
- 練習重繪TreeView控件
- AMD第七代桌面APU揭秘:主流首次上DDR4
- 字符串参数传递与返回值(转)
- 拖拽 开发 easyui php,Easyui-Builder
- 记录:添加trace_event埋点并调用
- kotlin基本语法--kotlin官网文档学习
- 下载编译LineageOS代码
- 传谷歌金山秘密合作研发Office软件
- linux操作TF卡的命令
- 外国内乱时,撤侨不一定是最佳策略
- mysql数据库字符集实践详解_mysql数据库 详解 之 自学成才1
- 认知篇---嵌入式工程师的未来发展前景怎么样
- Android_GitHub_xUtils之DbUtils、ViewUtils、HttpUtils、BitmapUtils
- Spring - 解决 SpringUtil getBean NPE 问题
热门文章
- 硬仗酒全线升级,新概念新玩法新风尚
- kaldi特征和模型空间转换
- 智能家居之温湿度传感器
- IntelliJ IDEA剪切复制快捷键 失效解决方案
- idea java项目乱码问题处理
- 高权重外链发布秘密技巧(虚拟外链转物理外链工具)
- Docker 无法启动 Failed to start LSB: Create lightweight, portable, self-sufficient containers.
- 2022-07-31:给出一个有n个点,m条有向边的图, 你可以施展魔法,把有向边,变成无向边, 比如A到B的有向边,权重为7。施展魔法之后,A和B通过该边到达彼此的代价都是7。 求,允许施展一次魔法
- 解决wifi连接错误:无法连接到这个网络
- SUST OJ 1675: Fehead的项目(单调栈)