hdu 4856 Tunnels
http://acm.hdu.edu.cn/showproblem.php?pid=4856
这道题就是搜索BFS+状压dp,把所经过的隧道的状态用二进制表示,然后dp就行。bfs求出每两个隧道的最短距离。
1 #include <cstdio> 2 #include <queue> 3 #include <cstring> 4 #include <algorithm> 5 #define maxn 1000 6 using namespace std; 7 const int inf=1<<29; 8 9 int n,m; 10 char g[16][16]; 11 int gg[16][16]; 12 struct node 13 { 14 int x1,y1,x2,y2; 15 } p[maxn],st3; 16 int dis[16][16]; 17 int dir[4][2]= {{0,1},{0,-1},{1,0},{-1,0}}; 18 int dp[1<<16][16]; 19 bool vis[maxn][maxn]; 20 21 int bfs(int s,int t) 22 { 23 queue<node>q; 24 memset(vis,false,sizeof(vis)); 25 for(int i=0; i<n; i++) 26 { 27 for(int j=0; j<n; j++) 28 { 29 dis[i][j]=inf; 30 } 31 } 32 node st; 33 st.x1=p[s].x2; 34 st.y1=p[s].y2; 35 dis[p[s].x2][p[s].y2]=0; 36 vis[p[s].x2][p[s].y2]=true; 37 q.push(st); 38 while(!q.empty()) 39 { 40 node st1=q.front(); 41 q.pop(); 42 if(st1.x1==p[t].x1&&st1.y1==p[t].y1) 43 { 44 return dis[p[t].x1][p[t].y1]; 45 } 46 for(int i=0; i<4; i++) 47 { 48 int xx=st1.x1+dir[i][0]; 49 int yy=st1.y1+dir[i][1]; 50 if(xx>=0&&xx<n&&yy>=0&&yy<n&&g[xx][yy]!='#') 51 { 52 if(!vis[xx][yy]) 53 { 54 dis[xx][yy]=dis[st1.x1][st1.y1]+1; 55 st3.x1=xx; 56 st3.y1=yy; 57 vis[xx][yy]=true; 58 q.push(st3); 59 } 60 } 61 } 62 } 63 return -1; 64 } 65 66 int main() 67 { 68 while(scanf("%d%d",&n,&m)!=EOF) 69 { 70 memset(g,0,sizeof(g)); 71 for(int i=0; i<n; i++) 72 { 73 scanf("%s",g[i]); 74 } 75 for(int i=0; i<m; i++) 76 { 77 scanf("%d%d%d%d",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2); 78 p[i].x1-=1; 79 p[i].y1-=1; 80 p[i].x2-=1; 81 p[i].y2-=1; 82 } 83 memset(dp,-1,sizeof(dp)); 84 for(int i=0; i<m; i++) 85 { 86 for(int j=0; j<m; j++) 87 { 88 if(i==j) gg[i][j]=0; 89 else 90 gg[i][j]=bfs(i,j); 91 } 92 } 93 for(int i=0; i<m; i++) 94 { 95 dp[1<<i][i]=0; 96 } 97 for(int i=0; i<(1<<m); i++) 98 { 99 for(int j=0; j<m; j++) 100 { 101 if((i&(1<<j))==0) continue; 102 if(dp[i][j]==-1) continue; 103 for(int k=0; k<m; k++) 104 { 105 if(gg[j][k]==-1) continue; 106 if(i&(1<<k)) continue; 107 if(dp[i|(1<<k)][k]==-1) dp[i|(1<<k)][k]=dp[i][j]+gg[j][k]; 108 else dp[i|(1<<k)][k]=min(dp[i|(1<<k)][k],dp[i][j]+gg[j][k]); 109 } 110 } 111 } 112 int ans=inf; 113 for(int i=0; i<m; i++) 114 { 115 if(dp[(1<<m)-1][i]!=-1) 116 ans=min(ans,dp[(1<<m)-1][i]); 117 } 118 if(ans==inf) printf("-1\n"); 119 else 120 printf("%d\n",ans); 121 } 122 return 0; 123 }
View Code
转载于:https://www.cnblogs.com/fanminghui/p/4030773.html
hdu 4856 Tunnels相关推荐
- HDU 4856 Tunnels(BFS+状压DP)
HDU 4856 Tunnels 题目链接 题意:给定一些管道.然后管道之间走是不用时间的,陆地上有障碍.陆地上走一步花费时间1,求遍历全部管道须要的最短时间.每一个管道仅仅能走一次 思路:先BFS预 ...
- HDU - 4856 Tunnels (预处理+状压dp)
HDU - 4856 Tunnels (预处理+状压dp) [hud链接] [vj链接] 题目 Problem Description Bob is travelling in Xi'an. He f ...
- Hdu 4856 Tunnels(状压dp)
题目链接 Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- HDU - 4856 Tunnels(哈密顿路径+状压dp)
题目链接:点击查看 题目大意:给出一个n*n的正方形网格,其中"."表示可以走的路,"#"表示障碍物,每次可以向上下左右任意方向走1格,花费1单位时间,再给出m ...
- Tunnels HDU - 4856 (bfs状压dp)
Tunnels HDU - 4856 Bob is travelling in Xi'an. He finds many secret tunnels beneath the city. In his ...
- Tunnels HDU - 4856
Bob is travelling in Xi'an. He finds many secret tunnels beneath the city. In his eyes, the city is ...
- HDU-4856 Tunnels(BFS状压DP)
Tunnels http://acm.hdu.edu.cn/showproblem.php?pid=4856 Time Limit: 3000/1500 MS (Java/Others) Mem ...
- HDU 1540 Tunnel Warfare
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 解题思路:线段树节点增加一个ld----区间左端点起始的最大长度,rd----区间右端点起始的最 ...
- UVALive - 4223(hdu 2926)
---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS ...
最新文章
- js请求结果拦截机器_分享:一步一个脚印,vue入门之axios的应用及拦截封装
- Qt Creator在浏览器中预览
- 使用 selector 从 SAP Spartacus state 里读取 Cart 数据
- windows下搭建hadoop+eclipse开发环境
- 输出该数二进制表示中1的个数。求取十进制数字元素1的个数 (3种方法)
- java web 应用技术与案例教程_《Java Web应用开发技术与案例教程》怎么样_目录_pdf在线阅读 - 课课家教育...
- VUE:EventHub
- android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
- 未来PCB行业互联网+发展趋势
- 正则化与数据先验分布的关系
- 支付宝芝麻信用分申请
- 模拟扑克牌花色:♠ ♥ ♦ ♣ * 牌号:A 2 3 4 5 6 7 8 9 10 J Q K * 大王、小王 * * 1.生成一副牌 * 2.然后发牌
- JavaScript异步编程(1)- ECMAScript 6的Promise对象
- Grafana修改主题背景升级版
- 基于PHP+MySQL托管中心管理系统的设计与实现
- datastage作业hang住
- PHP商城缺点,多用户商城系统php语言开发的优劣?
- DAO,除了协议、社交、媒体、服务之外还能发展哪个领域?
- 植物大战僵尸java圣诞版,植物大战僵尸圣诞版-植物大战僵尸2圣诞节版v1.9.1 安卓版-腾牛安卓网...
- 十次方项目开发系列【8】:对评论点赞功能开发 Redis的配置和使用
热门文章
- 飞步科技三篇论文入选CVPR 2022
- ECCV 2020 论文大盘点-自动驾驶篇
- 大幅减少GPU显存占用:可逆残差网络(The Reversible Residual Network)
- 工业视觉中的目标检测——兼谈天池大赛优胜方案
- 「假期余额不足」安排用Python写个时间在线生成器 快夸我
- 收藏 | Transformers资料汇总!从原理到应用
- tensorflow的数据输入
- 提升有监督学习效果的实战解析
- 专业工程师看过来~ | RDD、DataFrame和DataSet的细致区别
- mysql集群参数讲解_Mysql集群讲解(一)