hdu Rescue 1242
Rescue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11566 Accepted Submission(s): 4205
Angel's friends want to save Angel. Their task is: approach Angel. We assume that "approach Angel" is to get to the position where Angel stays. When there's a guard in the grid, we must kill him (or her?) to move into the grid. We assume that we moving up, down, right, left takes us 1 unit time, and killing a guard takes 1 unit time, too. And we are strong enough to kill all the guards.
You have to calculate the minimal time to approach Angel. (We can move only UP, DOWN, LEFT and RIGHT, to the neighbor grid within bound, of course.)
Then N lines follows, every line has M characters. "." stands for road, "a" stands for Angel, and "r" stands for each of Angel's friend.
Process to the end of the file.
#.#####.
#.a#..r.
#..#x...
..#..#.#
#...##..
.#......
........
- /*
- 广搜
- 检查了很久 最后 被困死的时候是 0,
- if(visit[i][j]<num && visit[i][j]!=0)
- 考虑了一些情况,题意很清晰,有多个r。一个a么?应该是。但是我没有处理。
- 由于x的存在使得 到达各点的时间可能存在多样,也加进去比较了。
- 但是之前写的dfs,没有考虑过这样的情况。
- */
- #include<stdio.h>
- #include<stdlib.h>
- #define HH 11111111
- char a[][];
- int map[][]={{,},{,},{,-},{-,}};
- int zhan[],len;
- int visit[][];
- int n,m;
- void bfs(int x,int y)
- {
- int i,x1,y1;
- zhan[++len]=x;
- zhan[++len]=y;
- visit[x][y]=;
- while(len>)
- {
- y=zhan[len--];
- x=zhan[len--];
- for(i=;i<;i++)
- {
- x1=x+map[i][];
- y1=y+map[i][];
- if(x1>=&&x1<=n && y1>=&&y1<=m)
- {
- if(visit[x1][y1]== && a[x1][y1]!='#')
- {
- if(a[x1][y1]=='.'||a[x1][y1]=='r')
- visit[x1][y1]=visit[x][y]+;
- else if(a[x1][y1]=='x')
- visit[x1][y1]=visit[x][y]+;
- zhan[++len]=x1;
- zhan[++len]=y1;
- }
- if(visit[x1][y1]> && a[x1][y1]!='#')
- {
- if((a[x1][y1]=='.'||a[x1][y1]=='r')&&visit[x1][y1]>visit[x][y]+)
- {
- visit[x1][y1]=visit[x][y]+;
- zhan[++len]=x1;
- zhan[++len]=y1;
- }
- if(a[x1][y1]=='x' && visit[x1][y1]>visit[x][y]+)
- {
- visit[x1][y1]=visit[x][y]+;
- zhan[++len]=x1;
- zhan[++len]=y1;
- }
- }
- }
- }
- }
- }
- int main()
- {
- int i,j,num;
- while(scanf("%d%d",&n,&m)>)
- {
- for(i=;i<=n;i++)
- scanf("%s",a[i]+);
- for(i=;i<=n;i++)
- for(j=;j<=m;j++)
- visit[i][j]=;
- for(i=;i<=n;i++)
- for(j=;j<=m;j++)
- {
- if(a[i][j]=='a')
- {
- len=;
- bfs(i,j);
- }
- }
- num=HH;
- for(i=;i<=n;i++)
- for(j=;j<=m;j++)
- if(a[i][j]=='r')
- {
- if(visit[i][j]<num && visit[i][j]!=)
- num=visit[i][j];
- }
- if(num==HH) printf("Poor ANGEL has to stay in the prison all his life.\n");
- else printf("%d\n",num);
- }
- return ;
- }
单纯的广搜,在浙大oj超时.... 蒋神却过了,思想很厉害。
- /*
- 优先队列
- */
- #include<stdio.h>
- #include<iostream>
- #include<cstdlib>
- #include<string.h>
- #include<queue>
- #define HH 11111111
- using namespace std;
- char a[][];
- int visit[][];
- int n,m;
- int map[][]={{,},{,},{-,},{,-}};
- struct node
- {
- friend bool operator< (node n1,node n2)
- {
- return n1.p>n2.p;
- }
- int p;
- int x;
- int y;
- };
- void bfs(int x,int y)
- {
- int i,x1,y1;
- priority_queue<node>b;
- while(!b.empty())
- {
- b.pop();
- }
- node tmp,tmp1;
- tmp.x=x;
- tmp.y=y;
- tmp.p=;
- b.push(tmp);
- visit[x][y]=;
- while(b.size()>)
- {
- tmp=b.top();
- b.pop();
- for(i=;i<;i++)
- {
- x1=tmp.x+map[i][];
- y1=tmp.y+map[i][];
- if(x1>=&&x1<=n && y1>=&&y1<=m && visit[x1][y1]== && a[x1][y1]!='#')
- {
- if(a[x1][y1]=='x')
- visit[x1][y1]=tmp.p+;
- else if(a[x1][y1]=='.' || a[x1][y1]=='r')
- visit[x1][y1]=tmp.p+;
- tmp1=tmp;
- tmp.x=x1;
- tmp.y=y1;
- tmp.p=visit[x1][y1];
- b.push(tmp);
- tmp=tmp1;
- if(a[x1][y1]=='r')return;
- }
- }
- }
- }
- int main()
- {
- int i,j,num;
- while(scanf("%d%d",&n,&m)>)
- {
- for(i=;i<=n;i++)
- scanf("%s",a[i]+);
- memset(visit,,sizeof(visit));
- for(i=;i<=n;i++)
- for(j=;j<=m;j++)
- {
- if(a[i][j]=='a')
- {
- bfs(i,j);
- }
- }
- num=HH;
- for(i=;i<=n;i++)
- for(j=;j<=m;j++)
- {
- if(a[i][j]=='r' && visit[i][j]!= && visit[i][j]<num)
- num=visit[i][j];
- }
- if(num==HH)
- printf("Poor ANGEL has to stay in the prison all his life.\n");
- else
- printf("%d\n",num);
- }
- return ;
- }
hdu Rescue 1242的更多相关文章
- hdu Rescue (bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1242 简单优先队列搜索,自己好久不敲,,,,,手残啊,,,,orz 代码: #include < ...
- hdu Rescue
因为要求的是最少的时间,很明显的是一个利用优先队列的bfs的题目,题目很一般. #include"iostream" #include"algorithm" # ...
- hdu 1242 Rescue
题目链接:hdu 1242 这题也是迷宫类搜索,题意说的是 'a' 表示被拯救的人,'r' 表示搜救者(注意可能有多个),'.' 表示道路(耗费一单位时间通过),'#' 表示墙壁,'x' 代表警卫(耗 ...
- hdu - 1242 Rescue && hdu - 2425 Hiking Trip (优先队列+bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1242 感觉题目没有表述清楚,angel的朋友应该不一定只有一个,那么正解就是a去搜索r,再用普通的bfs就能过了 ...
- hdu 1242 Rescue(bfs)
此刻再看优先队列,不像刚接触时的那般迷茫!这也许就是集训的成果吧! 加油!!!优先队列必须要搞定的! 这道题意很简单!自己定义优先级别! +++++++++++++++++++++++++++++++ ...
- 杭电 HDU 1242 Rescue
http://acm.hdu.edu.cn/showproblem.php?pid=1242 问题:牢房里有墙(#),警卫(x)和道路( . ),天使被关在牢房里位置为a,你的位置在r处,杀死一个警卫 ...
- HDU 1242 Rescue(优先队列)
题目来源: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目描述: Problem Description Angel was caught by ...
- HDU 1242 Rescue(BFS+优先队列)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目描述: Problem Description Angel was caught by t ...
- HDU 1242 -Rescue (双向BFS)&&( BFS+优先队列)
题目链接:Rescue 进度落下的太多了,哎╮(╯▽╰)╭,渣渣我总是埋怨进度比别人慢...为什么不试着改变一下捏.... 開始以为是水题,想敲一下练手的,后来发现并非一个简单的搜索题,BFS做肯定出 ...
随机推荐
- 【文文殿下】【BZOJ4804】欧拉心算
题解 显然有 \(ans=\sum _{i=1} ^{n} \lfloor \frac{n}{i} \rfloor \sum _{d|i} \mu(d) \phi (\frac{i}{d})\) 前半 ...
- [JavaScript] 获取数组中相同元素的个数
/** * 获取数组中相同元素的个数 * @param val 相同的元素 * @param arr 传入数组 */ function getSameNum(val,arr){ processArr ...
- [兼容]——IE 8 常见兼容性问题
接触了一个PC端网页开发的项目,要求兼容到IE 8,遇到不少坑,在这里记录下: 1.IE8 的兼容性视图 bug描述:IE8有许多新更新,但微软为了兼容以前的IE浏览器,提出了"兼容性视图& ...
- jmeter制造大批量的用户数据数据
需求:因测试需要,要造100w用户数据,通过用户名.手机号.密码可新增用户,其中用户名和电话号码要求100w用户不能重复 要点: 1.通过Bean shell Sampler实现用户名和手机号的足够随 ...
- Python小白学习之路(十一)—【局部变量和全局变量】【关键字global】【关键字nonlocal】
写在前面: 几乎有一周没有更新学习笔记了吧 上周一周身体都不怎么舒服 然后还得写开题报告 然后还得看文献 天天就是写写写写写写~~~~~~改改改改改改~~~~~~~~~ 今天又开始学习了 希望之前的没 ...
- pymysql模块使用
一.写函数的原因 写这个函数的原因就是为了能够不每次在用Python用数据库的时候还要在写一遍 做个通用函数做保留,也给大家做个小小的分享,函数不是最好的,希望有更好的代码的朋友能提出 互相学习 二 ...
- Java多线程——死锁
当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么他永远被阻塞,当线程A持有锁L并想获得锁M的同时,线程B持有锁M并同时尝试获得锁L时,那么两个线程将永远的等待下去,这中情况就是简单的死 ...
- 【STM32H7教程】第14章 STM32H7的电源,复位和时钟系统
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第14章 STM32H7的电源,复位和时钟系 ...
- 递归、字节流、文件复制_DAY20
1:递归(理解) (1)方法定义中调用方法本身的现象. (2)递归注意事项: A:要有出口,否则就是死递归. B:次数不能太多,否则内存溢出. 特殊事项:构造方法不能递归定义. 例子:cn.itcas ...
- 利用Windows资源监视器解决文件夹无法改名无法删除问题
在win7等Windows系统操作文件夹更名.删除时经常会报错,操作无法完成,balabala 这个时候仅凭在用的软件去一个一个找是很难的,即便软件全关了,还有后台进程,,,奔溃吧 好了,现在我们有了 ...