Tunnels HDU - 4856
BFS寻找每个点到其他点的最小距离
再状压DP,DP[i][j] i二进制表示每个点的到达状态,j为当前所在点
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
#define pii pair<int,int>
#define CLR(a,b) memset(a,b,sizeof(a))
const int INF = 0x3f3f3f3f;
const int maxn = 40000;
char maze[20][20];
int vis[20][20];
int dis[20][20][20][20];
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
int n,m; int Dis[20][20][20][20]; struct Node{
int x,y;
int d;
Node(int x,int y,int d){
this->x = x;
this->y = y;
this->d = d;
}
};
queue<Node> Queue; void bfs(int x,int y)
{
vis[x][y] = 1;
dis[x][y][x][y] = 0;
Queue.push(Node(x,y,0));
while(Queue.size()){
int nx = Queue.front().x;
int ny = Queue.front().y;
int nd = Queue.front().d;
Queue.pop();
for(int i=0;i<4;i++){
if(nx + dx[i] >=1 && nx + dx[i] <=n && ny + dy[i] >=1 && ny + dy[i] <= n){
if(!vis[nx + dx[i]][ny + dy[i]] && maze[nx + dx[i]][ny + dy[i]] == '.'){
dis[x][y][nx + dx[i]][ny + dy[i]] = nd + 1;
vis[nx + dx[i]][ny + dy[i]] = 1;
Queue.push(Node(nx + dx[i],ny + dy[i],nd + 1));
}
}
}
}
} int dp[maxn][20];
int POW[20];
int mm[20][5];
int flag = 0; void solve()
{
POW[0] = 1;
for(int i=1;i<20;i++){
POW[i] = POW[i-1]*2;
} CLR(dp,0x3f);
for(int i=0;i<m;i++)
dp[1<<i][i] = 0; for(int i=1;i<POW[m];i++){
for(int j=0;j<m;j++){
if((i&POW[j]) == POW[j]){ int n = i^POW[j];
for(int k=0;k<m;k++){
if( (n&POW[k]) == POW[k]){
int a = mm[k][3];
int b = mm[k][4];
int aa = mm[j][1];
int bb = mm[j][2]; dp[i][j] = min(dp[n][k] + dis[a][b][aa][bb],dp[i][j]);
// cout<<dp[i][j]<<endl;
}
}
}
}
} } int main()
{
// freopen("in.txt","r",stdin);
while(cin>>n>>m){
for(int i=1;i<=n;i++){
scanf("%s",maze[i]+1);
}
for(int i=0;i<20;i++) for(int j=0;j<20;j++) for(int k=0;k<20;k++) for(int l=0;l<20;l++) dis[i][j][k][l] = INF;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(maze[i][j] == '.'){
CLR(vis,0);
bfs(i,j);
}
}
}
for(int i=0;i<m;i++){
cin>>mm[i][1]>>mm[i][2]>>mm[i][3]>>mm[i][4];
}
solve();
int ans = INF;
for(int i=0;i<m;i++){
ans = min(dp[POW[m]-1][i],ans);
}
if(ans == INF){
cout<<-1<<endl;
}
else
cout<<ans<<endl;
}
return 0;
}
Tunnels HDU - 4856的更多相关文章
- hdu 4856 Tunnels(bfs+状态压缩)
题目链接:hdu 4856 Tunnels 题目大意:给定一张图,图上有M个管道,管道给定入口和出口,单向,如今有人想要体验下这M个管道,问最短须要移动的距离,起点未定. 解题思路:首先用bfs处理出 ...
- HDU 4856 Tunnels(BFS+状压DP)
HDU 4856 Tunnels 题目链接 题意:给定一些管道.然后管道之间走是不用时间的,陆地上有障碍.陆地上走一步花费时间1,求遍历全部管道须要的最短时间.每一个管道仅仅能走一次 思路:先BFS预 ...
- hdu 4856 Tunnels
http://acm.hdu.edu.cn/showproblem.php?pid=4856 这道题就是搜索BFS+状压dp,把所经过的隧道的状态用二进制表示,然后dp就行.bfs求出每两个隧道的最短 ...
- hdu 4856 Tunnels (记忆化搜索)
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- hdu 4856 Tunnels (bfs + 状压dp)
题目链接 The input contains mutiple testcases. Please process till EOF.For each testcase, the first line ...
- hdu 4856 Tunnels 状态压缩dp
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- HDU 4856 (状态压缩DP+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫.迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时.出隧道就耗时,你的 ...
- HDU 4856
http://acm.hdu.edu.cn/showproblem.php?pid=4856 西安邀请赛的一道题,这道题我们当时在现场最后1h才发现时状态压缩dp,惊险写出 现在回头想发现当时有点呆, ...
- 状压dpHDU - 4856
J - Tunnels HDU - 4856 题目大意:地图上有些管道,在管道行走里不需要花费时间,但从一个管道的出口走到另一个管道的入口则需要花费时间,问走完所有管道最短的时间,如果不行,则输出-1 ...
随机推荐
- JAVA使用Logback发送日志到控制台、文件、ELK的最简单用法
一.简述 本文讲JAVA使用Logback发送日志到控制台.文件.ELK的最简单用法. 二.教程 1.新建pom.xml项目引入下列依赖: <dependencies> <!--Be ...
- 招中高级web开发工程师
>>招中高级web开发工程师
- reStructuredText语法简单说明
reStructuredText 是扩展名为.rst的纯文本文件,含义为"重新构建的文本"",也被简称为:RST或reST. 官方网址: http://docutils. ...
- [Chrome插件] SelectJd(京东自营筛选器) v1.0.0 发布
如今京东的商品列表已经没有"自营"筛选了,只有"京东物流"筛选.导致找商品时不方便. 于是我开发了一下Chrome插件--SelectJd(京东自营筛选器). ...
- mysql string 列类型
CHAR和VARCHAR CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数 char 0~255 尾部填充空格到指定长度,检索时自动去掉空格. varchar 0~65535 VARC ...
- 最完整苹果IOS个人开发账号升级方法-个人开发账号升级为公司开发者账号常见误区
1:背景交代 大概晚上10点钟之后在知乎上看到很多人聊审核被拒PLA1.2,主要电商和金融类APP被拒很多.主要原因是 1:发布的APP与改账号关联度很低.(说白苹果怀疑你是山寨APP,不是优质的AP ...
- [转]PID控制算法原理
PID控制算法是工业界使用极其广泛的一个负反馈算法,相信这个算法在做系统软件时也有用武之处,这里摘录了知乎上的一篇文章,后面学习更多后自己总结一篇 以下为原文: PID控制应该算是应用非常广泛的控制算 ...
- Irrlicht 3D Engine 笔记系列 之 自己定义Animator
作者: i_dovelemon 日期: 2014 / 12 / 17 来源: CSDN 主题: Custom Animator, Referenced count 引言 在昨天的文章<Irrli ...
- 2018铁三测评题write以及一些想送给你们的话
一..前言 此文献给实验室的萌新们,以及刚刚接触CTF的同学们,希望能对你们的成长起到一些帮助. 二.关于CTF 可能你已经接触过CTF或者对它有所了解,这里我再简单介绍一下. 1.什么是CTF? C ...
- Activiti 工作流变量的修改方法
修改方法: //此方法的更新会同时更新 ru_ 和 hi_的数据 @Override public Map<String, Object> updateProcessFormValue(S ...