题意:给一个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相关推荐

  1. hdu4771 Stealing Harry Potter's Precious (状压+bfs)

    Problem Description Harry Potter has some precious. For example, his invisible robe, his wand and hi ...

  2. 【ICPC-212】hdu 4771 Stealing Harry Potter's Precious

    点击打开链接 题意:题目给定一个n*m的地图,地图有一个起点标记为'@',还有'#'表示不能够走的,'.'表示可以走.给定k个点,问从起点开始把这k个点走过去的最小步数. 思路:题目k的最大为4,那么 ...

  3. hdu 4771 Stealing Harry Potter#39;s Precious(bfs)

    题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...

  4. 区域赛铜牌专题(一)

    区域赛铜牌专题 题号 题目 知识点 HDU 5532 Almost Sorted Array 贪心,LIS HDU 5533 Dancing Stars on Me HDU 5536 Chip Fac ...

  5. 2014_hangzhou_onsite

    4770 Lights Against Dudely 状态压缩+枚举 4771 Stealing Harry Potter's Precious 签到,压缩后直接BFS 4772 Zhuge Lian ...

  6. hdu 4454 Stealing a Cake(三分之二)

    题目链接:hdu 4454 Stealing a Cake 题目大意:给定一个起始点s,一个圆形.一个矩形.如今从起点開始,移动到圆形再移动到矩形.求最短距离. 解题思路:在圆周上三分就可以.即对角度 ...

  7. HDU ACM 3986 Harry Potter and the Final Battle(邻接表实现最短路dijkstra堆优化记录路径 + 枚举最短路上每条边)...

    http://acm.hdu.edu.cn/showproblem.php?pid=3986 题意: 从起点1 到 终点n,删除图中任意一条边求最短路的最坏情况. n  --表示有n个点 m --边数 ...

  8. 【最小割】HDU 3987 Harry Potter and the Forbidden Forest

    得到的最小割得到sum sum/E 为 最小割 sum%E 为最小割的边数 #include <stdio.h> #include <string.h> #include &l ...

  9. HDU - 3987 Harry Potter and the Forbidden Forest(最小割最少边数)

    题目链接:点击查看 题目大意:给出一个由n个点和m条边组成的图,求最小割的最小边数 题目分析:和hdu6214大同小异,都是模板题,这个题目用第一种方法,也就是先跑一遍最大流,然后修改一下残余网络上的 ...

最新文章

  1. 医药信息化:GMP/GSP之后
  2. linux 系统 RRDTool安装方法
  3. UIView加任意边框(Masonry)
  4. CentOS 安装Nginx
  5. 基于visual c++之windows核心编程代码分析(64)现有的exe文件中添加自己的代码
  6. spring mvc工作原理及组件说明
  7. maven servlet配置_第一个Servlet配置
  8. bootstarp js设置列隐藏_Bootstrap框架----DataTables列表移动端适配定义隐藏列
  9. mongodb教程_MongoDB教程
  10. 小甲鱼Python教程,截图+代码+学习笔记,Python入门【10000字】【原创】
  11. 解惑:Redis的HSCAN命令中COUNT参数的失效场景
  12. vue 用百度地图实现链家找房的效果
  13. 基于python的OCR中文识别教程
  14. 表单checkbook获取已选择的值
  15. 【ROS】launch文件详解
  16. OMCS 语音视频框架
  17. MySql查询某一天的数据
  18. 话说程序员的职业生涯
  19. 第八课:ShuffleNet v1、ShuffleNet v2学习
  20. 救生艇(双指针)-C语言

热门文章

  1. 计算机专业可以考虑的证书 相关指导
  2. 公共场所人流数据统计如何实现?解决重识别、漏检等检测难题
  3. 树莓派与双色Led模块的那些事儿
  4. 尝试通过gin+redis为hugo博客添加频率限制反爬
  5. 区块链钱包的大大世界 你了解多少呢?
  6. 网易云加密--Android安卓移动应用程序加密加壳保护方案防破解防逆向分析防游戏外挂
  7. GuiLite学习参考借鉴
  8. 新建了一个A5纸张的带有小月历的周计划模
  9. 列举php中常见的魔术方法,PHP 中常用的 9 个魔术方法
  10. 【使用教程】CANopen一体化伺服电机在汇川H5U PLC上的应用(上)