bfs+状态压缩dp
题解 : 对两两管道进行bfs,然后用dp[i][j] 来表示在i状态下通过了前j个管道
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<int,int> pii;
typedef vector<int> vi;
#define de(x) cout << #x << "=" << x << endl
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define pb push_back
#define fi first
#define se second
const int inf = 0x3f3f3f3f;
const int N = 1e5+5;
char mp[20][20];
struct Pipe{
int x1,x2,y1,y2;
}a[20];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int dis[20][20];
int pp[20][20];
int dp[1<<15][20];
int n,m;
int bfs(Pipe a,Pipe b)
{
queue<pii>que;
int nx,ny;
memset(dis,-1,sizeof(dis));
dis[a.x2][a.y2]=0;
que.push(pii(a.x2,a.y2));
while(!que.empty())
{
pii u=que.front();
que.pop();
if(u.fi==b.x1&&u.se==b.y1) return dis[u.fi][u.se];
for(int i=0;i<4;i++)
{
nx=u.fi+dx[i],ny=u.se+dy[i];
if(nx>n||nx<=0||ny>n||ny<=0||mp[nx][ny]=='#'||dis[nx][ny]!=-1) continue;
dis[nx][ny]=dis[u.fi][u.se]+1;
que.push(pii(nx,ny));
}
}
return -1;
}
void init()
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
if(i==j) pp[i][j]=0;
else pp[i][j]=bfs(a[i],a[j]);
}
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
scanf("%s",mp[i]+1);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
}
init();
memset(dp,inf,sizeof(dp));
for(int i=1;i<=m;i++)
{
dp[1<<(i-1)][i]=0;
}
int ans=inf;
for(int i=0;i<(1<<m);i++)
{
for(int j=1;j<=m;j++)
{
if(i&(1<<(j-1)))//i状态下有第j个管道才能进行
{
for(int k=1;k<=m;k++)
{
if(i&(1<<(k-1))==0||pp[k][j]==-1) continue;//同理
dp[i][j]=min(dp[i^(1<<(j-1))][k]+pp[k][j],dp[i][j]);
}
}
if(i==(1<<m)-1) ans=min(ans,dp[i][j]);
}
}
if(ans==inf) cout<<"-1\n";
else cout<<ans<<endl;
}
}
bfs+状态压缩dp的更多相关文章
- HDU 3247 Resource Archiver (AC自己主动机 + BFS + 状态压缩DP)
题目链接:Resource Archiver 解析:n个正常的串.m个病毒串,问包括全部正常串(可重叠)且不包括不论什么病毒串的字符串的最小长度为多少. AC自己主动机 + bfs + 状态压缩DP ...
- BFS+状态压缩DP+二分枚举+TSP
http://acm.hdu.edu.cn/showproblem.php?pid=3681 Prison Break Time Limit: 5000/2000 MS (Java/Others) ...
- 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 3681 Prison Break(状态压缩dp + BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3681 前些天花时间看到的题目,但写出不来,弱弱的放弃了.没想到现在学弟居然写出这种代码来,大吃一惊附加 ...
- HOJ 2226&POJ2688 Cleaning Robot(BFS+TSP(状态压缩DP))
Cleaning Robot Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4264 Accepted: 1713 Descri ...
- hdu 4856 Tunnels 状态压缩dp
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- [转]状态压缩dp(状压dp)
状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...
- uva10857(状态压缩DP)
uva10857 题意 兔子希望在平面上 n 个点上放蛋,每个点最多放一个蛋,初始兔子在 (0, 0) 点,这里有无数个蛋,兔子可以回到这个点取蛋,兔子的速度为 \(v * 2^{-i}\)(i 为携 ...
- WOJ 1546 Maze 图论上的状态压缩DP
http://acm.whu.edu.cn/land/problem/detail?problem_id=1546 这个题目还是聪哥教的方法过的 首先搜索是必须的,而且通过搜索来缩点,这些应该要想到, ...
随机推荐
- FIRST GAME.
-Doragon Kuesuto(.c) Doragon Kuesuto 1.0 Doragon Kuesuto 1.15 Doragon Kuesuto 1.6
- CSS Outline(轮廓)
CSS Outline(轮廓) 一.CSS 轮廓(outline) 轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用. CSS outline 属性规定元素轮廓 ...
- hadoop cgroup+container配置
配置container-executor.cfg vim etc/hadoop/container-executor.cfg yarn.nodemanager.linux-container-exec ...
- 内核启动时在挂载ubi文件系统时提示UBIFS error (ubi0:0 pid 1): ubifs_read_superblock: min. I/O unit mismatch
一.背景 1.1 笔者机器的内核错误信息如下: UBIFS error (ubi0:0 pid 1): ubifs_read_superblock: min. I/O unit mismatch: 2 ...
- An Example for Javascript Function Scoping and Closure
1. An Real World Example In the patron detail page of the CRM system I'm working with, there’re larg ...
- [BZOJ3174]拯救小矮人
Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...
- Linux基础知识点
1.目录结构 bin 存放二进制可执行文件(ls,cat,mkdir等) boot 存放用于系统引导时使用的各种文件 dev 用于存放设备文件 etc 存放系统配置文件 home 存放所有用户文件的根 ...
- C# 操作FTP
操作FTP管理类: using System; using System.Collections.Generic; using System.Text; using System.Net; using ...
- 关于推荐库位 java前端与SQL语句后面的结合
----------------------------------------------------------------------------------- select a1.id,a1. ...
- e.target和e.currentTarget区别
直接上代码: body里: <div id="father"> father <div id="son"> son </div&g ...