Stealing Harry Potter‘s Precious HDU - 4771
题意:给一个n*m的矩阵,小偷从@出发可以走“.”,墙是“#”不可走,之后又K个珠宝,并且给你这K个珠宝的坐标,问小偷最少要走多少步可以吧珠宝偷完,如果不能偷完输出“-1”。
思路:先用一个bfs求任意两点距离,在用dfs求最短路
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
//d[i][j]第i个目标点 ,vis是否访问过
int n,m,k,d[10][505],vis[505][505];
int dir[4][2]={-1,0,0,1,1,0,0,-1};
char st[505][505];
//结构体记录点
struct node{int x,y,step;
}Now,Next,p;
//求第s~t目标点的距离,无法到达就等于inf
int bfs(int s,int t){memset(vis,0,sizeof(vis));p.x=d[s][0];p.y=d[s][1];p.step=0;vis[p.x][p.y]=1;queue<node>Q;Q.push(p);while(!Q.empty()){Now=Q.front();Q.pop();if(Now.x==d[t][0]&&Now.y==d[t][1])return Now.step;for(int i=0;i<4;i++){int tx=Now.x+dir[i][0];int ty=Now.y+dir[i][1];if(!vis[tx][ty]&&tx>=0&&tx<n&&ty>=0&&ty<m&&st[tx][ty]!='#'){Next.x=tx;Next.y=ty;Next.step=Now.step+1;vis[tx][ty]=1;Q.push(Next);}} }return inf;
}
int ans,book[10],dis[10][10];
//dfs求起点到终点最短路
void dfs(int u,int v,int sum){if(v==k){ans=min(ans,sum);return ;}for(int i=1;i<=k;i++){if(!book[i]){book[i]=1;dfs(i,v+1,sum+dis[u][i]);book[i]=0;}}
}
int main(){while(~scanf("%d%d",&n,&m)){ans=inf;if(n==0&&m==0)break;memset(d,0,sizeof(d));memset(dis,0x3f,sizeof(dis));for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>st[i][j];if(st[i][j]=='@'){d[0][0]=i;d[0][1]=j;}}}cin>>k;int x,y;for(int i=1;i<=k;i++){cin>>x>>y;d[i][0]=--x;d[i][1]=--y;}//求dis for(int i=0;i<k;i++){for(int j=i+1;j<=k;j++){dis[i][j]=dis[j][i]=bfs(i,j);}}memset(book,0,sizeof(book));dfs(0,0,0);if(ans==inf)printf("-1\n");else printf("%d\n",ans);}return 0;
}
Stealing Harry Potter‘s Precious HDU - 4771相关推荐
- hdu4771 Stealing Harry Potter's Precious (状压+bfs)
Problem Description Harry Potter has some precious. For example, his invisible robe, his wand and hi ...
- 【ICPC-212】hdu 4771 Stealing Harry Potter's Precious
点击打开链接 题意:题目给定一个n*m的地图,地图有一个起点标记为'@',还有'#'表示不能够走的,'.'表示可以走.给定k个点,问从起点开始把这k个点走过去的最小步数. 思路:题目k的最大为4,那么 ...
- hdu 4771 Stealing Harry Potter#39;s Precious(bfs)
题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...
- 区域赛铜牌专题(一)
区域赛铜牌专题 题号 题目 知识点 HDU 5532 Almost Sorted Array 贪心,LIS HDU 5533 Dancing Stars on Me HDU 5536 Chip Fac ...
- 2014_hangzhou_onsite
4770 Lights Against Dudely 状态压缩+枚举 4771 Stealing Harry Potter's Precious 签到,压缩后直接BFS 4772 Zhuge Lian ...
- hdu 4454 Stealing a Cake(三分之二)
题目链接:hdu 4454 Stealing a Cake 题目大意:给定一个起始点s,一个圆形.一个矩形.如今从起点開始,移动到圆形再移动到矩形.求最短距离. 解题思路:在圆周上三分就可以.即对角度 ...
- HDU ACM 3986 Harry Potter and the Final Battle(邻接表实现最短路dijkstra堆优化记录路径 + 枚举最短路上每条边)...
http://acm.hdu.edu.cn/showproblem.php?pid=3986 题意: 从起点1 到 终点n,删除图中任意一条边求最短路的最坏情况. n --表示有n个点 m --边数 ...
- 【最小割】HDU 3987 Harry Potter and the Forbidden Forest
得到的最小割得到sum sum/E 为 最小割 sum%E 为最小割的边数 #include <stdio.h> #include <string.h> #include &l ...
- HDU - 3987 Harry Potter and the Forbidden Forest(最小割最少边数)
题目链接:点击查看 题目大意:给出一个由n个点和m条边组成的图,求最小割的最小边数 题目分析:和hdu6214大同小异,都是模板题,这个题目用第一种方法,也就是先跑一遍最大流,然后修改一下残余网络上的 ...
最新文章
- 医药信息化:GMP/GSP之后
- linux 系统 RRDTool安装方法
- UIView加任意边框(Masonry)
- CentOS 安装Nginx
- 基于visual c++之windows核心编程代码分析(64)现有的exe文件中添加自己的代码
- spring mvc工作原理及组件说明
- maven servlet配置_第一个Servlet配置
- bootstarp js设置列隐藏_Bootstrap框架----DataTables列表移动端适配定义隐藏列
- mongodb教程_MongoDB教程
- 小甲鱼Python教程,截图+代码+学习笔记,Python入门【10000字】【原创】
- 解惑:Redis的HSCAN命令中COUNT参数的失效场景
- vue 用百度地图实现链家找房的效果
- 基于python的OCR中文识别教程
- 表单checkbook获取已选择的值
- 【ROS】launch文件详解
- OMCS 语音视频框架
- MySql查询某一天的数据
- 话说程序员的职业生涯
- 第八课:ShuffleNet v1、ShuffleNet v2学习
- 救生艇(双指针)-C语言