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 & % ...
随机推荐
- vue我的总结+转原理
我的总结 vue:1 mvvm模型,model,view,viewmodel,自底层向上,逐渐增加的模式2 .vue文件 包含html css js 有最近设计原则,将自己需要的放到最近,2 组件化 ...
- OpenStack的架构详解
OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云,也为大云.小云提供可扩展的.灵活的 ...
- 带你走进ajax(4)
处理ajax返回数据类型 ajax返回数据类型:纯文本格式.xml.json 如果只获取简单的字符串可以采用纯文本格式. 如果返回的数据类型比较复杂,则采用xml或者json. 采用XML来处理数据 ...
- rowspan && colspan
> 跨行 <html> <body> <table width="> <tr> <th>col1</th> &l ...
- 【c++ primer, 5e】设计Sales_data类 & 定义改进的Sales_data类
[设计Sales_data类] 1.考虑Sales_data类应该有那些接口. isbn.combine.add.read.print... 2.考虑如何使用这些接口. Sales_data tota ...
- FileSystemWatcher监听文件是否有被修改
作用:监听文件系统更改通知,并在目录或目录中的文件更改时引发事件. 需求:监听特定文件是否修改,然后做出相应的操作. 方法: ①利用一个线程,一直去查找该指定的文件是否有被修改,如果修改则操作特定步骤 ...
- Maven 中央仓库搭建
Maven中央仓库搭建 搭建系统:Linux Centos 7.4 x64 安装环境:JDK1.8.maven3.5.4.nexus-3.13 下载:nexus-3.13.0-01-unix.tar. ...
- 手动加载B120i/B320i阵列卡驱动安装RHEL7.0
实验设备: Micro server Gen8(B120i) DL360e Gen8(B320i) 目录 一.前期准备... 1 二.加载阵列卡驱动... 11 三.手动分区... 21 四.安装设置 ...
- cmd中如何查看环境变量
查看所有环境变量 set 查看某一个环境变量 C:\WINDOWS\system32>set no_proxyNO_PROXY=localhost,127.0.0.1,172.31.212.14 ...
- Excel导出失败的提示
未处理System.InvalidCastException HResult=-2147467262 Message=无法将类型为“Microsoft.Office.Interop.Excel.App ...