HDU 1026 BSF+优先队列+记录路径、
#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+优先队列+记录路径、的更多相关文章
- hdu 1226 BFS + bfs记录路径
http://acm.hdu.edu.cn/showproblem.php? pid=1226 为了节省空间.您可以使用vis初始化数组初始化-1. 发现BFSeasy错了地方 始一直WA在这里:就是 ...
- hdu 1026 Ignatius and the Princess I(优先队列+bfs+记录路径)
以前写的题了,现在想整理一下,就挂出来了. 题意比较明确,给一张n*m的地图,从左上角(0, 0)走到右下角(n-1, m-1). 'X'为墙,'.'为路,数字为怪物.墙不能走,路花1s经过,怪物需要 ...
- 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 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- HDU 1026 Ignatius and the Princess I(带路径的BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1026 题意:给出一个迷宫,求出到终点的最短时间路径. 这道题目在迷宫上有怪物,不同HP的怪物会损耗不同的时间,这 ...
- 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 ...
- 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 1074(状态压缩dp+记录路径)
题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...
- hdu 1664(数论+同余搜索+记录路径)
Different Digits Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
随机推荐
- Hdu 1269 强连通判定
题目链接 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- 错觉-Info:视错觉与UI元素间的可能
ylbtech-错觉-Info:视错觉与UI元素间的可能 1.返回顶部 1. 视觉原理在当下红火的机械视觉中是必不可少的,那在我们日常工作的UI产品设计中又有什么可能性的呢?今天,我从“视错觉”这个角 ...
- 杨柳絮-Info:春天将不再漫天飞“雪”,济源治理杨柳絮在行动
ylbtech-杨柳絮-Info:春天将不再漫天飞“雪”,济源治理杨柳絮在行动 1.返回顶部 1. 天气暖和了,连心情都是阳光的.然而,在这美好的时刻,漫天飞舞的杨柳絮,甚是煞风景.<ignor ...
- JDK8 Stream 数据流效率分析
JDK8 Stream 数据流效率分析 Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream<T> ...
- Lambada. 计算和
Lambada. 计算和 import java.util.Arrays; import java.util.List; public class ListLambada { public stati ...
- JSP Web第六章整理复习 JavaBean技术
P183 什么是JavaBean,JavaBean有哪些特点? javabean是一种特殊的java类 特点:属性private,方法public P184 JavaBean封装数据,例6-1,6-2 ...
- JS对HTML实体字符转义和反转义
一.名词解释 HTML实体字符: 由于在HTML中有些符号是预留的,比如在html中不能直接使用尖括号(‘<’或‘>’),会被误认为标签符号.所以需要通过HTML实体字符去进行替换: HT ...
- PHPCMS快速建站系列之后台内容自定义修改
一.后台登录页面 背景图:\statics\images\admin_img 中的 login_bg.jpg 底部版权信息:\phpcms\languages\en 中的 system.lang.ph ...
- twitter、facebook、pinterest、linkedin 分享代码
twitter.facebook.pinterest.linkedin 分享代码 http://www.cnblogs.com/adstor-Lin/p/3994449.html
- Codeforces 425B
点击打开题目链接 题意:给定一个n×m的0,1矩阵,做多可以对矩阵做k次变换,每次变换只可以将矩阵的某一个元素由0变成1,或从1变成0. 求最小的变换次数使得得到的矩阵满足:每一个连通块都是一个“实心 ...