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

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

代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef unsigned int ui;
  4. typedef long long ll;
  5. typedef unsigned long long ull;
  6. #define pf printf
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define prime1 1e9+7
  9. #define prime2 1e9+9
  10. #define pi 3.14159265
  11. #define lson l,mid,rt<<1
  12. #define rson mid+1,r,rt<<1|1
  13. #define scand(x) scanf("%llf",&x)
  14. #define f(i,a,b) for(int i=a;i<=b;i++)
  15. #define scan(a) scanf("%d",&a)
  16. #define dbg(args) cout<<#args<<":"<<args<<endl;
  17. #define inf 0x3f3f3f3f
  18. #define maxn 105
  19. int n,m,t;
  20. int Map[maxn][maxn];
  21. int dir[][]={,,,-,,,-,};
  22. int flag[maxn][maxn];
  23. bool vis[maxn][maxn];
  24. struct node{
  25. int x,y,time;
  26. node(int x,int y,int t):x(x),y(y),time(t){}
  27. node(){}
  28. friend bool operator < ( const node& a,const node& b)
  29. {
  30. return a.time>b.time;//反向定义操作符,堆顶为time最小的node
  31. }
  32. };
  33. node cur,nxt;
  34. int bfs()
  35. {
  36. priority_queue<node>q;
  37. q.push(node(,,));
  38. vis[][]=;
  39. while(!q.empty())
  40. {
  41. cur=q.top();
  42. if(cur.x==n-&&cur.y==m-)return cur.time;
  43. q.pop();
  44. f(i,,)
  45. {
  46. nxt=cur;
  47. nxt.x+=dir[i][];
  48. nxt.y+=dir[i][];
  49. nxt.time++;
  50. if(nxt.x<||nxt.x>=n||nxt.y<||nxt.y>=m||Map[nxt.x][nxt.y]==-)continue;
  51. if(!vis[nxt.x][nxt.y])
  52. {
  53. vis[nxt.x][nxt.y]=;
  54. flag[nxt.x][nxt.y]=i+;//保证起点为0,扩展结点方向为大于1
  55. if(Map[nxt.x][nxt.y])nxt.time+=Map[nxt.x][nxt.y];
  56. q.push(nxt);
  57. }
  58. }
  59. }
  60. return -;
  61. }
  62. void print(int x,int y)
  63. {
  64. if(!flag[x][y])return;
  65. int px=x-dir[flag[x][y]-][];
  66. int py=y-dir[flag[x][y]-][];
  67. print(px,py);//递归打印
  68. pf("%ds:(%d,%d)->(%d,%d)\n",++t,px,py,x,y);
  69. while(Map[x][y]--)
  70. pf("%ds:FIGHT AT (%d,%d)\n",++t,x,y);
  71. }
  72. int main()
  73. {
  74. //freopen("input.txt","r",stdin);
  75. //freopen("output.txt","w",stdout);
  76. std::ios::sync_with_stdio(false);
  77. while(scanf("%d%d",&n,&m)!=EOF)
  78. {
  79. char c;
  80. mem(vis,false);
  81. mem(flag,);
  82. f(i,,n-)
  83. f(j,,m-)
  84. {
  85. scanf(" %c",&c);
  86. if(c=='X')Map[i][j]=-;//将字符地图转化成数字地图
  87. else if(c=='.')Map[i][j]=;
  88. else Map[i][j]=c-'';
  89. }
  90. int ans=bfs();
  91. if(ans==-)
  92. {
  93. pf("God please help our poor hero.\n");
  94. }
  95. else
  96. {
  97. pf("It takes %d seconds to reach the target position, let me show you the way.\n",ans);
  98. t=;
  99. print(n-,m-);
  100. }
  101. pf("FINISH\n");
  102. }
  103. }

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. 从TP-Link到雷蛇,纷纷入局智能手机业到底想干什么?

    ​   "眼看他起朱楼,眼看他宴宾客,眼看他楼塌了",这句形容世态炎凉的话其实与智能手机市场更为相像.诺基亚的辉煌与没落.黑莓的强势与消声无迹.摩托罗拉的数次易手.小米的横空出世与 ...

  2. 初窥Android AudioFlinger

    Android  AudioFlinger 是Android音频系统的两大服务之一,另一个服务是AudioPolicyService,这两大服务都在系统启动时有MediaSever加载,加载的代码位于 ...

  3. u-boot的环境变量详解

    u-boot的环境变量      u-boot的环境变量是使用u-boot的关键,它可以由你自己定义的,但是其中有一些也是大家经常使用,约定熟成的,有一些是u-boot自己定义的,更改这些名字会出现错 ...

  4. 软工 实验一 Git代码版本管理

    实验目的: 1)了解分布式版本控制系统的核心机理: 2)   熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git status指令 3 ...

  5. go语言指南之斐波纳契闭包

    练习:斐波纳契闭包 让我们用函数做些好玩的事情. 实现一个 fibonacci 函数,它返回一个函数(闭包),该闭包返回一个斐波纳契数列 `(0, 1, 1, 2, 3, 5, ...)`. 这是一个 ...

  6. py基础之数据类型及基本语法

    '''python中有五种数据类型,分别是整数.浮点数.字符串.布尔值.空值'''a = 1b = 2.0c = 'hello,world'print (a,b,c)#a是整数,b是浮点数,c是字符串 ...

  7. 前端每日实战:149# 视频演示如何用纯 CSS 创作一个宝路薄荷糖的动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oagrvz 可交互视频 此视频是可 ...

  8. Asp.Net Core IdentityServer4 中的基本概念

    一.前言 这篇文章可能大家会觉得很空洞,没有实际的实战东西,主要是自己整理出来的IdentityServer4 的一些概念性的东西:如果你对IdentityServer4有过一定的实战经验,可以跳过不 ...

  9. JZOJ 1301. treecut

    1301. treecut (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description 有一个N个节点的无根树,各节 ...

  10. SpringBoot1.5.10.RELEASE整合druid时,在druid monitor界面出现(*) property for user to setup

    接上篇随笔,配置druid之后出现的错误,解决方法如下: @Bean(destroyMethod = "close",initMethod = "init") ...