hdu-1242-Rescue-优先队列
来源:互联网 发布:淘宝seo的优化流程 编辑:程序博客网 时间:2024/05/21 17:17
翻译:有一个天使被抓住了,然后关在了Moligpy监狱,这个监狱里面有墙,也有路,当然也有守卫把守!而天使的朋友们想要去救出天使,他们的任务是:抵达天使所在的位置!在监狱里,如果遇见守卫,那么必须将之杀掉,才能继续移动!我们假定在监狱中我们可以向上,下,左,右移动!每移动一次,将会消耗一个单位时间,要是遇见守卫的话,杀掉守卫还需要用时一个单位时间(所以此时用时总共为2个单位时间)!不用担心,天使的朋友对付守卫还是没问题的!
现在你的问题来了:请计算解救天使所需要的最短时间!
这个题的意思大概就是酱紫了!要计算最短时间,这个题应该是使用BFS来解决!
这个题我一开始看的时候,以为天使的朋友只有一个,结果后来才发现是有多个的,
所以就不能按常规的思路来解决了!而且,这个时候,我们搜索的起点不应该是朋友的
位置了,而是天使的位置!
另外,由于有多个朋友,还要求求出最短时间,所以这里就需要应用优先队列了!
下面是我的代码:最近才学的优先队列,所以写得比较水啦!见谅!
#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;int dx[4]= {1,0,-1,0};int dy[4]= {0,1,0,-1};//定义方向数组!int n,m,sx,sy,num;int vis[520][520];char map[520][520];char sos[520]= {"Poor ANGEL has to stay in the prison all his life."};struct node{ int x,y; int step; bool operator<(const node e)const { //优先队列的使用,这里是重新载入运算符! return step>e.step; }};priority_queue<node>q;void rescue(){ node now,change,ee; now.x=sx; now.y=sy; now.step=0; //这里是初始化一个点的信息!把天使的位置赋进去! q.push(now); //然后入队! while(!q.empty()) { change=q.top(); q.pop();//出队! for(int i=0; i<4; i++) { ee.x=change.x+dx[i]; ee.y=change.y+dy[i]; if(ee.x>=0&&ee.x<n&ee.y>=0&&ee.y<m&&vis[ee.x][ee.y]==0) { vis[ee.x][ee.y]=1;//标记! if(map[ee.x][ee.y]=='r') { //逆向寻找到了天使的一个朋友! num=change.step+1; return ; } if(map[ee.x][ee.y]=='x')//时间加2! ee.step=change.step+2; else ee.step=change.step+1;//时间加1! q.push(ee); } } }}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { memset(vis,0,sizeof(vis)); for(int i=0; i<n; i++) { scanf("%s",map[i]); for(int j=0; j<m; j++) { if(map[i][j]=='a') { sx=i; sy=j; }//逆序寻找,因为有多个r,但是a只有一个! if(map[i][j]=='#') vis[i][j]=1;//把墙标记为1 } } num=520; vis[sx][sy]=1; while(!q.empty()) q.pop();//将队列清除干净! rescue(); if(num==520) printf("%s\n",sos); else printf("%d\n",num); } return 0;}
0 0
- hdu 1242 Rescue 优先队列
- hdu-1242-Rescue-优先队列
- HDU-1242Rescue(优先队列)
- HDU 1242 Rescue【优先队列】
- 【优先队列】HDU Rescue
- hdu 1242Rescue(bfs+优先队列)
- HDU 1242 Rescue(广搜+优先队列)
- hdu 1242 Rescue (优先队列+bfs)
- HDU 1242 Rescue(BFS +优先队列)
- hdu 1242 Rescue(bfs+优先队列)
- hdu 1242 Rescue (优先队列)
- HDU 1242 Rescue 优先队列+BFS
- HDU 1242 Rescue(BFS,优先队列)
- HDU 1242 Rescue(BFS+优先队列)
- hdu-1242-Rescue(优先队列 BFS)
- HDU 1242 Rescue(优先队列 + 多源BFS)
- [ACM] hdu 1242 Rescue (BFS+优先队列)
- hdu 1242 Rescue(BFS优先队列)
- Android Training - Volley(Lesson 1 - 发送简单的请求)
- iOS7.0后 根据字符串长度计算label的尺寸
- KMP
- CodeForces 437 A. The Child and Homework
- make[1]: *** [libgd.la] Error 1解决方法
- hdu-1242-Rescue-优先队列
- Java Persistence with MyBatis 3(中文版) 第二章 引导MyBatis
- Uiautomator 新体验
- Windows Phone 8.1 App 图片资源需求列表
- 安卓自带示例BluetoothChat详解
- configure error:安装php时出现configure: error: Unable to find gd.h anywhere under,错误解决
- C 字符串危险操作函数和替换方法
- Undefined symbol CopyProgramFromNand (referred from 2440init.o)
- 模拟bootstrap$坏块故障