hdu 1026 Ignatius and the Princess I(BFS+优先队列)
传送门:
http://acm.hdu.edu.cn/showproblem.php?pid=1026
Ignatius and the Princess I
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21841 Accepted Submission(s): 7023
Special Judge
1.Ignatius can only move in four directions(up, down, left, right), one step per second. A step is defined as follow: if current position is (x,y), after a step, Ignatius can only stand on (x-1,y), (x+1,y), (x,y-1) or (x,y+1).
2.The array is marked with some characters and numbers. We define them like this:
. : The place where Ignatius can walk on.
X : The place is a trap, Ignatius should not walk on it.
n : Here is a monster with n HP(1<=n<=9), if Ignatius walk on it, it takes him n seconds to kill the monster.
Your task is to give out the path which costs minimum seconds for Ignatius to reach target position. You may assume that the start position and the target position will never be a trap, and there will never be a monster at the start position.
.XX.1.
..X.2.
2...X.
...XX.
XXXXX.
5 6
.XX.1.
..X.2.
2...X.
...XX.
XXXXX1
5 6
.XX...
..XX1.
2...X.
...XX.
XXXXX.
1s:(0,0)->(1,0)
2s:(1,0)->(1,1)
3s:(1,1)->(2,1)
4s:(2,1)->(2,2)
5s:(2,2)->(2,3)
6s:(2,3)->(1,3)
7s:(1,3)->(1,4)
8s:FIGHT AT (1,4)
9s:FIGHT AT (1,4)
10s:(1,4)->(1,5)
11s:(1,5)->(2,5)
12s:(2,5)->(3,5)
13s:(3,5)->(4,5)
FINISH
It takes 14 seconds to reach the target position, let me show you the way.
1s:(0,0)->(1,0)
2s:(1,0)->(1,1)
3s:(1,1)->(2,1)
4s:(2,1)->(2,2)
5s:(2,2)->(2,3)
6s:(2,3)->(1,3)
7s:(1,3)->(1,4)
8s:FIGHT AT (1,4)
9s:FIGHT AT (1,4)
10s:(1,4)->(1,5)
11s:(1,5)->(2,5)
12s:(2,5)->(3,5)
13s:(3,5)->(4,5)
14s:FIGHT AT (4,5)
FINISH
God please help our poor hero.
FINISH
#include<bits/stdc++.h>
using namespace std;
#define max_v 105
#define INF 99999999
struct node
{
int x,y;
int sum;
friend bool operator<(const node &a,const node &b)
{
return a.sum>b.sum;
}
};
struct nn
{
int x,y;
}pre[max_v][max_v];
int f[][]={{,},{-,},{,},{,-}};
char s[max_v][max_v];
int ptr[max_v][max_v];
priority_queue <node> Q;
int n,m,ans;
int bfs()
{
int i;
while(!Q.empty())
{
Q.pop();
}
node temp,tx;
temp.x=;
temp.y=;
temp.sum=;
ptr[][]=;
Q.push(temp);
while(!Q.empty())
{
node t=Q.top();
Q.pop();
if(t.x==n-&&t.y==m-)
{
ans=t.sum;
return ;
}
for(i=;i<;i++)
{
int a=t.x+f[i][];
int b=t.y+f[i][];
if(a>=&&a<n&&b>=&&b<m&&s[a][b]!='X')
{
tx.x=a;
tx.y=b;
tx.sum=t.sum+;
if(s[a][b]!='.')
tx.sum+=s[a][b]-'';
if(ptr[a][b]>tx.sum)
{
ptr[a][b]=tx.sum;
pre[a][b].x=t.x;
pre[a][b].y=t.y;
Q.push(tx);
}
}
}
}
return ;
}
void pf(int x,int y)
{
int i;
if(x==&&y==)
return ;
pf(pre[x][y].x,pre[x][y].y);
printf("%ds:(%d,%d)->(%d,%d)\n",ptr[pre[x][y].x][pre[x][y].y]+,pre[x][y].x,pre[x][y].y,x,y);
if(s[x][y]!='.')
{
for(i=;i<=s[x][y]-'';i++)
{
printf("%ds:FIGHT AT (%d,%d)\n",ptr[pre[x][y].x][pre[x][y].y]++i,x,y);
}
}
}
int main()
{
int i,j;
while(~scanf("%d %d",&n,&m))
{
for(i=;i<n;i++)
{
scanf("%s",s[i]);
}
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
ptr[i][j]=INF;
}
}
if(bfs())
{
printf("It takes %d seconds to reach the target position, let me show you the way.\n",ans);
pf(n-,m-);
}else
{
printf("God please help our poor hero.\n");
}
printf("FINISH\n");
}
return ;
}
hdu 1026 Ignatius and the Princess I(BFS+优先队列)的更多相关文章
- hdu 1026 Ignatius and the Princess I (bfs+记录路径)(priority_queue)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1026 Problem Description The Princess has been abducted ...
- hdu 1026 Ignatius and the Princess I【优先队列+BFS】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- hdu 1026:Ignatius and the Princess I(优先队列 + bfs广搜。ps:广搜AC,深搜超时,求助攻!)
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- HDU 1026 Ignatius and the Princess I(BFS+记录路径)
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- hdu 1026 Ignatius and the Princess I
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1026 Ignatius and the Princess I Description The Prin ...
- HDU 1026 Ignatius and the Princess I(BFS+优先队列)
Ignatius and the Princess I Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &am ...
- hdu 1026 Ignatius and the Princess I(bfs)
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- hdu 1026 Ignatius and the Princess I 搜索,输出路径
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- hdu1026.Ignatius and the Princess I(bfs + 优先队列)
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
随机推荐
- ajax传json
需求 前台有许多字段需要用ajax传送给后台, 如果给直接将字段封装成JSON对象传给后台会很方便 解决 ajax 发送 var str = {"name":"xiaom ...
- java时间工具类
在项目中,很多地方需要根据时间获取相应的数据,将时间格式化,或者时间比较等相关操作.一个良好的工具类不仅可以减少代码冗余,还能促进业务处理,加快进度. /** * @author: lxw * @Da ...
- 前端小结(3)---- 添加遮罩层,并弹出div
有如下div: <div id='pop-div' class="pop-box"> <div class="input-group has-info& ...
- Java设计模式—原型模式
原型设计模式是一种比较简单的设计模式,在项目中使用的场景非常多. 个人理解: 原型模式实现了对Java中某个对象的克隆功能,即该对象的类必须implements实现Cloneable接口来标识为可被克 ...
- 动画演示10个有趣但毫无用处的Linux命令
Linux最强大的一个特征就是它有大量的各种小命令工具,这也可以称做是它最有趣的一个地方了.在这些大量的有用的命令和脚本中,你会发现有少部 分命令工具不那么有用的——如果你不愿意说是完全没用处的话.你 ...
- 04_dubbo_ioc
[dubbo的IOC实现方法] dubbo的IOC具体实现在:T injectExtension( T instance )方法中,该方法在3个地方被使用: ExtensionLoader.getEx ...
- Android学习——Service(二)
今天来介绍Service的第二种使用方式,Bind方式 Bind方式启动服务 Bind方式和Start方式启动很类似,都是通过Intent来启动,不同的是,Bind方式需要传入三个参数,如下: Int ...
- Oracle归档模式和非归档模式的区别
一.查看oracle数据库是否为归档模式: Sql代码1.select name,log_mode from v$database; NAME LOG_MODE ------------------ ...
- Apache POI使用
使用apache poi解析 Excel文件: package excellucene; import java.io.File; import java.io.FileInputStream; im ...
- 数据结构之排序技术:快速排序、归并排序、堆排序(C++版)
快速排序 #include <iostream> using namespace std; void swap(int num[], int i, int j) { int temp = ...