#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
const int qq=110;
const int MAX=10000;
char map[qq][qq];
int pre[qq][qq];
int a[MAX],b[MAX];
int n,m;
int dir[5][2]={0,0,1,0,-1,0,0,1,0,-1}; // 走的顺序是右,左,下,上
struct Node
{
int x,y;
int pre; // 定义来源的方向 1左 2右 3上 4下
char mark; //是否存在怪兽
int time;
friend bool operator <(Node a,Node b)
{
return a.time>b.time;
}
};
priority_queue<Node>Q;
int check(int x,int y)
{
if(x<0||y<0||x>=n||y>=m) //判断是否越界
return 0;
if(pre[x][y]) // 判断是否走过这点
return 0;
if(map[x][y]=='X') // 判断是否是墙
return 0;
return 1;
}
void bfs()
{
Node ans,cns;
ans.x=0;ans.y=0;ans.pre=0;ans.time=0;ans.mark=map[0][0];
Q.push(ans);
while(!Q.empty()){
cns=Q.top();
Q.pop();
//printf("%d %d\n",cns.x,cns.y);
if(cns.x==n-1&&cns.y==m-1){
//printf("%d %d\n",cns.x,cns.y);
while(!Q.empty())
Q.pop();
Q.push(cns);
break;
}
for(int i=1;i<=4;++i){
ans.x=cns.x+dir[i][1];
ans.y=cns.y+dir[i][0];
if(check(ans.x,ans.y)){
ans.mark=map[ans.x][ans.y];
ans.pre=i;
pre[ans.x][ans.y]=i;
if(map[ans.x][ans.y]>='1'&&map[ans.x][ans.y]<='9')
ans.time=cns.time+1+(map[ans.x][ans.y]-'0');
else
ans.time=cns.time+1;
Q.push(ans);
}
}
}
return;
}
void out()
{
Node ans;
ans=Q.top();
Q.pop();
printf("It takes %d seconds to reach the target position, let me show you the way.\n",ans.time);
int r=1;
a[0]=ans.x;b[0]=ans.y;
int x=ans.x,y=ans.y;
//printf("%d %d\n",x,y);
while(x!=0||y!=0){ // x和y搞反了 调了两个小时、 真特么醉了
if(pre[x][y]==1)
y=y-1;
else if(pre[x][y]==2)
y=y+1;
else if(pre[x][y]==3)
x=x-1;
else if(pre[x][y]==4)
x=x+1;
a[r]=x;b[r++]=y;
// printf("%d %d\n",x,y);
}
int t=1;
for(int i=r-2;i>=0;--i){
printf("%ds:(%d,%d)->(%d,%d)\n",t++,a[i+1],b[i+1],a[i],b[i]);
if(map[a[i]][b[i]]>='1'&&map[a[i]][b[i]]<='9')
for(int j=0;j<map[a[i]][b[i]]-'0';++j)
printf("%ds:FIGHT AT (%d,%d)\n",t++,a[i],b[i]);
}
}
int main()
{
while(~scanf("%d %d",&n,&m)){
memset(pre,0,sizeof(pre));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<n;++i)
scanf("%s",map[i]);
bfs();
if(Q.empty()) printf("God please help our poor hero.\n");
else out();
printf("FINISH\n");
while(!Q.empty())
Q.pop();
}
return 0;
}
// 记录路径的数组开小了、又调了好久!!QAQ

HDU 1026 BSF+优先队列+记录路径、的更多相关文章

  1. hdu 1226 BFS + bfs记录路径

    http://acm.hdu.edu.cn/showproblem.php? pid=1226 为了节省空间.您可以使用vis初始化数组初始化-1. 发现BFSeasy错了地方 始一直WA在这里:就是 ...

  2. hdu 1026 Ignatius and the Princess I(优先队列+bfs+记录路径)

    以前写的题了,现在想整理一下,就挂出来了. 题意比较明确,给一张n*m的地图,从左上角(0, 0)走到右下角(n-1, m-1). 'X'为墙,'.'为路,数字为怪物.墙不能走,路花1s经过,怪物需要 ...

  3. 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 ...

  4. hdu 1026(优先队列+路径输出)

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  5. HDU 1026 Ignatius and the Princess I(带路径的BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1026 题意:给出一个迷宫,求出到终点的最短时间路径. 这道题目在迷宫上有怪物,不同HP的怪物会损耗不同的时间,这 ...

  6. 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 ...

  7. 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 ...

  8. hdu 1074(状态压缩dp+记录路径)

    题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...

  9. hdu 1664(数论+同余搜索+记录路径)

    Different Digits Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

随机推荐

  1. 转: CentOS上安装LAMP之第一步:Apache环境及安装过程报错解决方案(纯净系统环境)

    传送门:http://blog.csdn.net/zhangatle/article/details/77416996  小心坑!填完就懂怎么安装了 Note:要从零开始搭建,就不要嫌中间遇到各种问题 ...

  2. laravel-admin

    laravel-admin 文档地址: http://laravel-admin.org/docs/#/zh/

  3. Python数据分析与展示[第三周](pandas简介与数据创建)

    第三周的课程pandas 分析数据 http://pandas.pydata.org import pandas as pd 常与numpy matplotlib 一块定义 d=pd.Series(r ...

  4. 基于spring-boot的测试桩设计--几种常见的controller

    第一种:通过@RequestBody,直接将请求体映射到对象 //@RequestBody @RequestMapping(value = "addUser", method = ...

  5. Codeforces 442A

    题目链接 A. Borya and Hanabi time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  6. 【JZOJ4935】【NOIP2017GDKOI模拟1.12】b

    Boring 构造一棵包含1号结点的连通子集个数刚好为给定的n的树. 这棵树的结点不能多于60. 1<=n<=109 Gai 容易得到,计算给定一棵树的Ans1,其中Ansi表示包含i号结 ...

  7. ajax嵌套陷阱

    ajax嵌套陷阱 $('.ajaxupd').click(function () { $('.shadow1').show(); $('.update').show(); var tds=$(this ...

  8. iOS 9 学习系列:Split Screen Multitasking

    http://www.cocoachina.com/ios/20151010/13601.html iOS 9 的一个重大变化就是增加了多任务,这个多任务允许用户在屏幕上同时运行多个 app.有两种形 ...

  9. js表格上下移动添加删除

    html部分 <div onclick='fn()'>加</div> <table width="250" border="1" ...

  10. @bzoj - 4951@ [Wf2017]Money for Nothing

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 在这道题种你需要解决一个全世界人类从存在起就在面临的最深刻的问题 ...