题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1026/

题意就是一个迷宫,然后有些位置上有守卫,守卫有一个血量,要多花费血量的时间击败他,要求从(0,0)到(n-1,m-1)的最少用时。显然是用优先队列和bfs实现,因为求解图中每一层结点各自的时间不同,所以我们必须选出时间短的。还有就是递归打印路径的问题,注意一下就好。

代码如下:

 #include<bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a))
#define prime1 1e9+7
#define prime2 1e9+9
#define pi 3.14159265
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define scand(x) scanf("%llf",&x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define scan(a) scanf("%d",&a)
#define dbg(args) cout<<#args<<":"<<args<<endl;
#define inf 0x3f3f3f3f
#define maxn 105
int n,m,t;
int Map[maxn][maxn];
int dir[][]={,,,-,,,-,};
int flag[maxn][maxn];
bool vis[maxn][maxn];
struct node{
int x,y,time;
node(int x,int y,int t):x(x),y(y),time(t){}
node(){}
friend bool operator < ( const node& a,const node& b)
{
return a.time>b.time;//反向定义操作符,堆顶为time最小的node
}
};
node cur,nxt;
int bfs()
{
priority_queue<node>q;
q.push(node(,,));
vis[][]=;
while(!q.empty())
{
cur=q.top();
if(cur.x==n-&&cur.y==m-)return cur.time;
q.pop();
f(i,,)
{
nxt=cur;
nxt.x+=dir[i][];
nxt.y+=dir[i][];
nxt.time++;
if(nxt.x<||nxt.x>=n||nxt.y<||nxt.y>=m||Map[nxt.x][nxt.y]==-)continue;
if(!vis[nxt.x][nxt.y])
{
vis[nxt.x][nxt.y]=;
flag[nxt.x][nxt.y]=i+;//保证起点为0,扩展结点方向为大于1
if(Map[nxt.x][nxt.y])nxt.time+=Map[nxt.x][nxt.y];
q.push(nxt);
}
}
}
return -;
}
void print(int x,int y)
{
if(!flag[x][y])return;
int px=x-dir[flag[x][y]-][];
int py=y-dir[flag[x][y]-][];
print(px,py);//递归打印
pf("%ds:(%d,%d)->(%d,%d)\n",++t,px,py,x,y);
while(Map[x][y]--)
pf("%ds:FIGHT AT (%d,%d)\n",++t,x,y);
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
std::ios::sync_with_stdio(false);
while(scanf("%d%d",&n,&m)!=EOF)
{
char c;
mem(vis,false);
mem(flag,);
f(i,,n-)
f(j,,m-)
{
scanf(" %c",&c);
if(c=='X')Map[i][j]=-;//将字符地图转化成数字地图
else if(c=='.')Map[i][j]=;
else Map[i][j]=c-'';
}
int ans=bfs();
if(ans==-)
{
pf("God please help our poor hero.\n");
}
else
{
pf("It takes %d seconds to reach the target position, let me show you the way.\n",ans);
t=;
print(n-,m-);
}
pf("FINISH\n");
}
}

hdu1026Ignatius and the Princess ,又要逃离迷宫了的更多相关文章

  1. hdu 1728:逃离迷宫(DFS,剪枝)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. HDU 1728:逃离迷宫(BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description   给定一个m × n (m行, n列)的迷宫,迷宫中有 ...

  3. hdoj 1728 逃离迷宫

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. 逃离迷宫(HDU 1728 BFS)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. hdu 4524 郑厂长系列故事——逃离迷宫 小水题

    郑厂长系列故事——逃离迷宫 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  6. HDU 1728 逃离迷宫(DFS||BFS)

    逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...

  7. hdu 1728 逃离迷宫 (BFS)

    逃离迷宫 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  8. HDU 1728 逃离迷宫(DFS)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题目: 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)  ...

  9. hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))

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

  10. HDU 1728 逃离迷宫(DFS经典题,比赛手残写废题)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

随机推荐

  1. Python实现简单Web服务器

    实验楼教程链接: https://www.shiyanlou.com/courses/552/labs/1867/document http原理详解(http下午茶): https://www.kan ...

  2. Binder机制简析(三)

    注册Service Service组件运行在Server进程中,首先要将Service注册到Service Manager中,再启动一个Binder线程池来等待和处理Client的通信请求. 注册过程 ...

  3. 安装Redis内存分析工具rdbtools

    一.安装Python2.7 1. wget http://10.12.29.98:8090/tools/Python-2.7.11.tgz 2. ln -s /usr/local/python2.7/ ...

  4. AAAI |如何保证人工智能系统的准确性?

    ​ |如何保证人工智能系统的准确性?" title="AAAI |如何保证人工智能系统的准确性?"> ​ 注:本文译自AI is getting smarter; ...

  5. 浅谈了解JDBC

    目录 前言 作用 JDBC的架构 步骤 JDBC常见的关键字解释 前言 Java数据库连接,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法.J ...

  6. leetcode 1365. How Many Numbers Are Smaller Than the Current Number

    Given the array nums, for each nums[i] find out how many numbers in the array are smaller than it. T ...

  7. 彻底理解使用JavaScript 将Json数据导出CSV文件

    前言 将数据报表导出,是web数据报告展示常用的附带功能.通常这种功能都是用后端开发人员编写的.今天我们主要讲的是直接通过前端js将数据导出Excel的CSV格式的文件. 原理 首先在本地用Excel ...

  8. JS 增删改查操作XML

    效果图: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  9. nx-admin1.2版本发布

    nx-admin 是一个开源的管理系统前端集成方案 github地址 nx-admin的初心 组件更易用, 让每个小白快速上手, 最大程度上帮助个人,企业节省时间成本和费用开支. 尽管这个过程不简单, ...

  10. pycharm在windows中如何安装dlib?

    pycharm在windows下安装dlib库的时候,出现以下错误(等等类似的问题): 解决办法: 1.这个方法无关紧要,只是记录一下:将清华源替换为阿里源: C:\Users\Administrat ...