hdu1026Ignatius and the Princess ,又要逃离迷宫了
题目链接: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 ,又要逃离迷宫了的更多相关文章
- hdu 1728:逃离迷宫(DFS,剪枝)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1728:逃离迷宫(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有 ...
- hdoj 1728 逃离迷宫
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 逃离迷宫(HDU 1728 BFS)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 4524 郑厂长系列故事——逃离迷宫 小水题
郑厂长系列故事——逃离迷宫 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
- HDU 1728 逃离迷宫(DFS||BFS)
逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
- hdu 1728 逃离迷宫 (BFS)
逃离迷宫 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- HDU 1728 逃离迷宫(DFS)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题目: 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) ...
- 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 ...
- HDU 1728 逃离迷宫(DFS经典题,比赛手残写废题)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 从TP-Link到雷蛇,纷纷入局智能手机业到底想干什么?
"眼看他起朱楼,眼看他宴宾客,眼看他楼塌了",这句形容世态炎凉的话其实与智能手机市场更为相像.诺基亚的辉煌与没落.黑莓的强势与消声无迹.摩托罗拉的数次易手.小米的横空出世与 ...
- 初窥Android AudioFlinger
Android AudioFlinger 是Android音频系统的两大服务之一,另一个服务是AudioPolicyService,这两大服务都在系统启动时有MediaSever加载,加载的代码位于 ...
- u-boot的环境变量详解
u-boot的环境变量 u-boot的环境变量是使用u-boot的关键,它可以由你自己定义的,但是其中有一些也是大家经常使用,约定熟成的,有一些是u-boot自己定义的,更改这些名字会出现错 ...
- 软工 实验一 Git代码版本管理
实验目的: 1)了解分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git status指令 3 ...
- go语言指南之斐波纳契闭包
练习:斐波纳契闭包 让我们用函数做些好玩的事情. 实现一个 fibonacci 函数,它返回一个函数(闭包),该闭包返回一个斐波纳契数列 `(0, 1, 1, 2, 3, 5, ...)`. 这是一个 ...
- py基础之数据类型及基本语法
'''python中有五种数据类型,分别是整数.浮点数.字符串.布尔值.空值'''a = 1b = 2.0c = 'hello,world'print (a,b,c)#a是整数,b是浮点数,c是字符串 ...
- 前端每日实战:149# 视频演示如何用纯 CSS 创作一个宝路薄荷糖的动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oagrvz 可交互视频 此视频是可 ...
- Asp.Net Core IdentityServer4 中的基本概念
一.前言 这篇文章可能大家会觉得很空洞,没有实际的实战东西,主要是自己整理出来的IdentityServer4 的一些概念性的东西:如果你对IdentityServer4有过一定的实战经验,可以跳过不 ...
- JZOJ 1301. treecut
1301. treecut (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description 有一个N个节点的无根树,各节 ...
- SpringBoot1.5.10.RELEASE整合druid时,在druid monitor界面出现(*) property for user to setup
接上篇随笔,配置druid之后出现的错误,解决方法如下: @Bean(destroyMethod = "close",initMethod = "init") ...