题目连接

题解 : 对两两管道进行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的更多相关文章

  1. HDU 3247 Resource Archiver (AC自己主动机 + BFS + 状态压缩DP)

    题目链接:Resource Archiver 解析:n个正常的串.m个病毒串,问包括全部正常串(可重叠)且不包括不论什么病毒串的字符串的最小长度为多少. AC自己主动机 + bfs + 状态压缩DP ...

  2. BFS+状态压缩DP+二分枚举+TSP

    http://acm.hdu.edu.cn/showproblem.php?pid=3681 Prison Break Time Limit: 5000/2000 MS (Java/Others)   ...

  3. 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 ...

  4. HDU 3681 Prison Break(状态压缩dp + BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3681 前些天花时间看到的题目,但写出不来,弱弱的放弃了.没想到现在学弟居然写出这种代码来,大吃一惊附加 ...

  5. HOJ 2226&POJ2688 Cleaning Robot(BFS+TSP(状态压缩DP))

    Cleaning Robot Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4264 Accepted: 1713 Descri ...

  6. hdu 4856 Tunnels 状态压缩dp

    Tunnels Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem ...

  7. [转]状态压缩dp(状压dp)

    状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...

  8. uva10857(状态压缩DP)

    uva10857 题意 兔子希望在平面上 n 个点上放蛋,每个点最多放一个蛋,初始兔子在 (0, 0) 点,这里有无数个蛋,兔子可以回到这个点取蛋,兔子的速度为 \(v * 2^{-i}\)(i 为携 ...

  9. WOJ 1546 Maze 图论上的状态压缩DP

    http://acm.whu.edu.cn/land/problem/detail?problem_id=1546 这个题目还是聪哥教的方法过的 首先搜索是必须的,而且通过搜索来缩点,这些应该要想到, ...

随机推荐

  1. FIRST GAME.

    -Doragon Kuesuto(.c) Doragon Kuesuto 1.0 Doragon Kuesuto 1.15 Doragon Kuesuto 1.6

  2. CSS Outline(轮廓)

    CSS Outline(轮廓) 一.CSS 轮廓(outline) 轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用. CSS outline 属性规定元素轮廓 ...

  3. hadoop cgroup+container配置

    配置container-executor.cfg vim etc/hadoop/container-executor.cfg yarn.nodemanager.linux-container-exec ...

  4. 内核启动时在挂载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 ...

  5. 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 ...

  6. [BZOJ3174]拯救小矮人

    Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...

  7. Linux基础知识点

    1.目录结构 bin 存放二进制可执行文件(ls,cat,mkdir等) boot 存放用于系统引导时使用的各种文件 dev 用于存放设备文件 etc 存放系统配置文件 home 存放所有用户文件的根 ...

  8. C# 操作FTP

    操作FTP管理类: using System; using System.Collections.Generic; using System.Text; using System.Net; using ...

  9. 关于推荐库位 java前端与SQL语句后面的结合

    ----------------------------------------------------------------------------------- select a1.id,a1. ...

  10. e.target和e.currentTarget区别

    直接上代码: body里: <div id="father"> father <div id="son"> son </div&g ...