hdu 4771 13 杭州 现场 B - Stealing Harry Potter's Precious 暴力bfs 难度:0
Description

Some rooms are indestructible and some rooms are vulnerable. Goblins always care more about their own safety than their customers' properties, so they live in the indestructible rooms and put customers' properties in vulnerable rooms. Harry Potter's precious are also put in some vulnerable rooms. Dudely wants to steal Harry's things this holiday. He gets the most advanced drilling machine from his father, uncle Vernon, and drills into the bank. But he can only pass though the vulnerable rooms. He can't access the indestructible rooms. He starts from a certain vulnerable room, and then moves in four directions: north, east, south and west. Dudely knows where Harry's precious are. He wants to collect all Harry's precious by as less steps as possible. Moving from one room to another adjacent room is called a 'step'. Dudely doesn't want to get out of the bank before he collects all Harry's things. Dudely is stupid.He pay you $1,000,000 to figure out at least how many steps he must take to get all Harry's precious.
Input
In each test cases:
The first line are two integers N and M, meaning that the bank is a N × M grid(0<N,M <= 100).
Then a N×M matrix follows. Each element is a letter standing for a room. '#' means a indestructible room, '.' means a vulnerable room, and the only '@' means the vulnerable room from which Dudely starts to move.
The next line is an integer K ( 0 < K <= 4), indicating there are K Harry Potter's precious in the bank.
In next K lines, each line describes the position of a Harry Potter's precious by two integers X and Y, meaning that there is a precious in room (X,Y).
The input ends with N = 0 and M = 0
Output
Sample Input
##@
#.#
1
2 2
4 4
#@##
....
####
....
2
2 1
2 4
0 0
Sample Output
5
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
typedef pair<int,int> P;
const int inf=0x7ffffff;
int n,m,k;
int px[],py[];//记录珍宝坐标,德拉克坐标设为第0个
int d[][];//记录珍宝间最短距离
char maz[][];//记录迷宫状态
int ind[][];//记录珍宝编号
bool vis[][];//bfs用
int dis[][];//bfs用,最短距
const int dx[]={,-,,};const int dy[]={,,-,};
bool ok(int x,int y){
return x>=&&x<n&&y>=&&y<m&&maz[x][y]!='#';
}
void bfs(int index){
int sx=px[index],sy=py[index];
for(int i=;i<n;i++)for(int j=;j<m;j++)dis[i][j]=inf;
memset(vis,,sizeof(vis));
vis[sx][sy]=true;
d[index][index]=;
dis[sx][sy]=;
queue<P>que;
que.push(P(sx,sy));
while(!que.empty()){
sx=que.front().first;sy=que.front().second;que.pop();
for(int i=;i<;i++){
int tx=sx+dx[i],ty=sy+dy[i];
if(ok(tx,ty)&&!vis[tx][ty]){
vis[tx][ty]=true;dis[tx][ty]=dis[sx][sy]+;
if(ind[tx][ty]!=||maz[tx][ty]=='@'){
d[index][ind[tx][ty]]=dis[tx][ty];}
que.push(P(tx,ty));
}
}
}
}
int getlength(int a[]){
int ans=;
for(int i=;i<k;i++)ans+=d[a[i]][a[i+]];
return ans;
}
int pre(){
int a[];//暴力枚举所有可能排列
for(int i=;i<=k;i++)a[i]=i;//需注意第一个排列
int ans=getlength(a);
while(next_permutation(a+,a+k+)){//注意不要直接排列k
ans=min(ans,getlength(a));
}
return ans;
}
int main(){
while(scanf("%d%d",&n,&m)){
if(n==&&m==)break;
for(int i=;i<n;i++){
scanf("%s",maz[i]);
}
scanf("%d",&k);
memset(ind,,sizeof(ind));
for(int i=;i<=k;i++){scanf("%d%d",px+i,py+i);px[i]--;py[i]--;ind[px[i]][py[i]]=i;}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
if(maz[i][j]=='@'){
px[]=i;
py[]=j;
ind[i][j]=;
break;
}
}
}
for(int i=;i<;i++)for(int j=;j<;j++)d[i][j]=inf;
for(int i=;i<=k;i++)bfs(i);
int ans=pre();
printf("%d\n",ans==inf?-:ans);
}
return ;
}
hdu 4771 13 杭州 现场 B - Stealing Harry Potter's Precious 暴力bfs 难度:0的更多相关文章
- hdu 3682 10 杭州 现场 C To Be an Dream Architect 容斥 难度:0
C - To Be an Dream Architect Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &a ...
- HDU 4771 Stealing Harry Potter's Precious dfs+bfs
Stealing Harry Potter's Precious Problem Description Harry Potter has some precious. For example, hi ...
- hdu 4770 13 杭州 现场 A - Lights Against Dudely 暴力 bfs 状态压缩DP 难度:1
Description Harry: "But Hagrid. How am I going to pay for all of this? I haven't any money.&quo ...
- 【HDU 4771 Stealing Harry Potter's Precious】BFS+状压
2013杭州区域赛现场赛二水... 类似“胜利大逃亡”的搜索问题,有若干个宝藏分布在不同位置,问从起点遍历过所有k个宝藏的最短时间. 思路就是,从起点出发,搜索到最近的一个宝藏,然后以这个位置为起点, ...
- hdu4771 Stealing Harry Potter's Precious(DFS,BFS)
练习dfs和bfs的好题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs ...
- HDU 4771 Stealing Harry Potter's Precious (2013杭州赛区1002题,bfs,状态压缩)
Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- HDU 4771 Stealing Harry Potter's Precious
Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@' 表示的是起点,'#' 表示的是障碍物不能通过,'.' 表示的是路能通过的: ...
- hdu 3685 10 杭州 现场 F - Rotational Painting 重心 计算几何 难度:1
F - Rotational Painting Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
随机推荐
- koa2简单demo
// 导入koa,和koa 1.x不同,在koa2中,我们导入的是一个class,因此用大写的Koa表示: const Koa = require('koa'); const Router = req ...
- 263. Ugly Number(判断是否是丑数 剑指offer34)
Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...
- 理解android分辨率限定符 layout-sw360dp
首先,我们来看看单位dp是怎么一回事,dp是一种单位,使用它,你可以在高.低分辨率上获得一样的空间表现,也就是说,它是像素无关的. dp计算公式:160*pix/ppi(pix是你要计算的高度或者宽度 ...
- SiteMesh使用(2.4.2)
SiteMesh是一个网页布局和修饰的框架.我理解的是在一个母版页上引入页面各个位置的信息,从而拼接成一个页面展示出来.它定义了一个过滤器,把页面统一加上头部和底部. 我的项目是在springmvc中 ...
- chrome 获得点击按钮时的事件
初次了解浏览器高级点的功能,原来这么强 想了解点击一个网页的按钮时触发了什么事件,firefox chrome确实很强大,基本可以监控所有内容 以chrome为例: 在按钮上 右键检查 或者 F12 ...
- [HAOI2017模拟]囚人的旋律
没有传送门辣. 神奇的DP题. 首先看到这道题第一眼应该想到正解不是在图上搞,肯定要把原图转化成序列. 根据逆序对的性质.每个点和标号大于他的点连边的点,其权值必定要小于该点,而没和他连边的且标号大于 ...
- 深度学习笔记(一):logistic分类【转】
本文转载自:https://blog.csdn.net/u014595019/article/details/52554582 这个系列主要记录我在学习各个深度学习算法时候的笔记,因为之前已经学过大概 ...
- shell内置命令eval的具有什么作用
答:把变量中的内容当成命令来执行
- Juniper SRX 简单命令一
Juniper为人所熟悉的一定是从netscreen开始的,作为一线防火墙品牌,还是有很高的地位.但是以前玩netscreen,都是用的网页版去配置,而且网页版做得很不错.但是现在netscreen要 ...
- OpenDayLight "Error executing command: java.lang.NullPointerException"问题解决
参考: Fedora 21 mostly working but NullPointerException at Karaf shell 在使用ODL的时候,安装功能组件时出现: Error exec ...