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 (Java/Others)
Total Submission(s): 18847 Accepted Submission(s): 6090
Special Judge
1.Ignatius can only move in four directions(up, down, left, right), one step per second. A step is defined as follow: if current position is (x,y), after a step, Ignatius can only stand on (x-1,y), (x+1,y), (x,y-1) or (x,y+1).
2.The array is marked with some characters and numbers. We define them like this:
. : The place where Ignatius can walk on.
X : The place is a trap, Ignatius should not walk on it.
n : Here is a monster with n HP(1<=n<=9), if Ignatius walk on it, it takes him n seconds to kill the monster.
Your task is to give out the path which costs minimum seconds for Ignatius to reach target position. You may assume that the start position and the target position will never be a trap, and there will never be a monster at the start position.
/*
Name: hdu--1026--Ignatius and the Princess I
Copyright: ©2017 日天大帝
Author: 日天大帝
Date: 21/04/17 17:30
Description: bfs搜索路径,dfs打印路径
*/
#include<cstring>
#include<queue>
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct node{
int x,y,steps;
bool operator<(const node&a)const{
return steps>a.steps;
}
};
int bfs();
void dfs(int,int);
;
int map[MAX][MAX];
int to[MAX][MAX];
int cnt[MAX][MAX];
int n,m,ct;
][] = {{,},{,-},{,},{-,}};
int main(){
// freopen("in.txt","r",stdin);
ios::sync_with_stdio(false);
while(cin>>n>>m){
memset(map,,sizeof(map));
memset(to,,sizeof(to));
memset(cnt,,sizeof(cnt));
; i<n; ++i){
; j<m; ++j){
char ch;cin>>ch;
if(ch == '.'){
map[i][j] = ;
};
';
}
}
int ans = bfs();
if(ans){
cout<<"It takes "<<ans<<" seconds to reach the target position, let me show you the way."<<endl;
ct = ;
dfs(n-,m-);
}else printf("God please help our poor hero.\n");
cout<<"FINISH\n";//G++WA无数次,hdu C++ AC了
}
;
}
void dfs(int x,int y){
if(!to[x][y])return ;
int i,j;
i = x - dir[to[x][y]-][];//剪枝
j = y - dir[to[x][y]-][];//剪枝
dfs(i,j);
printf("%ds:(%d,%d)->(%d,%d)\n",ct++,i,j,x,y);
while(cnt[x][y]--) {
printf("%ds:FIGHT AT (%d,%d)\n",ct++,x,y);
}
}
int bfs(){
node start;
start.x = ;
start.y = ;
start.steps = ;
map[][] = -;
priority_queue<node> q;
q.push(start);
while(!q.empty()){
node a,temp = q.top();q.pop();
&& temp.y == m-)return temp.steps;
; i<; ++i){//i<4(n)
a.x = temp.x + dir[i][];
a.y = temp.y + dir[i][];
||a.y< || map[a.x][a.y] == -)continue;
a.steps = temp.steps + map[a.x][a.y] + ;
map[a.x][a.y] = -;
to[a.x][a.y] = i+;//剪枝
q.push(a);
}
}
;
}
hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))的更多相关文章
- hdu 1026 Ignatius and the Princess I(BFS+优先队列)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1026 Ignatius and the Princess I Time Limit: 2000/100 ...
- 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(BFS+记录路径)
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
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1026 Ignatius and the Princess I Description The Prin ...
- hdu 1026 Ignatius and the Princess I【优先队列+BFS】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- HDU 1026 Ignatius and the Princess I(BFS+优先队列)
Ignatius and the Princess I Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &am ...
- 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 1026 Ignatius and the Princess I(bfs)
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 搜索,输出路径
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的怪物会损耗不同的时间,这 ...
随机推荐
- cmake的安装和卸载
cmake介绍: CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性 ...
- jquery(select)下拉框 选取选中的值
var get_date_type=$("#date_type").find("option:selected").val(); var get_date_ty ...
- Example008关闭IE窗口时,不弹出询问对话框
<!-- 实例008关闭IE主窗口时,不弹出询问对话框 --> <meta charset="UTF-8"> <a href="#" ...
- 2.Smarty的引入和实例化
1.把demo和lib复制出来,并且创建一个test文件夹作为工作的目录 如图所示: 2.这是libs里面的内容,其中smarty.class.php包含了smarty各种方法和功能,需要实例化它还工 ...
- accp8.0转换教材第1章多线程理解与练习
一.单词部分: ①process进程 ②current当前的③thread线程④runnable可获取的 ⑤interrupt中断⑥join加入⑦yield产生⑧synchronize同时发生 二.预 ...
- Vsftpd3.0--FTP服务器搭建之本地用户篇
Vsftpd3.0--FTP服务器搭建之本地用户篇 年4月10日 19:23 FTP服务在工作中是经用到的一种工具,可以实现上传下载等功能.那么今天我们来聊一聊FTP服务器使用本地用户登录的实现模式. ...
- Servlet Filter 中init和destroy问题
测试源码如下: package com.FilterTest.Filter; import java.io.IOException; import javax.servlet.Filter; impo ...
- Django学习(四)---Admin配置
1)Admin: admin是django自带的功能强大的自动化数据管理界面 被授权的用户可以直接在Admin中管理数据库(增.删.改.查) Django提供了许多针对Admin的定制功能 2)配置A ...
- 使用mysqldump备份数据库
#! /bin/shday_str=`date +%j`day=`date +%Y%m%d`days_str=`echo "$day_str % 60"|bc`cd /home/d ...
- docker学习笔记--重基础使用
最近一直在研究Elasticsearch,后来部门的同事遇到了一个docker集群的未授权访问漏洞,于是稍微看了一下docker进行了一下基本的入门,本文把自己学习docker的过程进行了一个详细的记 ...