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 这个题目还是聪哥教的方法过的 首先搜索是必须的,而且通过搜索来缩点,这些应该要想到, ...
随机推荐
- AVAudioSession(4):响应音频中断事件
本文转自:AVAudioSession(4):响应音频中断事件 | www.samirchen.com 本文内容主要来源于 Responding to Interruptions. 当一个音频中断到来 ...
- C++文件路径的写法
转自:http://blog.csdn.net/chengonghao/article/details/51057780 文件路径的表示可以分为绝对路径和相对路径: c++中\\是一种转义字符,他表示 ...
- std::tuple作为参数invoke调用函数
template<typename Function, typename Tuple, std::size_t... Index> decltype(auto) invoke_impl(F ...
- 找不到resources下的文件
今天发现一个很坑的问题,浪费了很长的时间排查问题,特此记录下.目录结构如下图所示: 结果加载文件的时候,一直报错: 找不到resource文件夹下的 conf/mybatis/logDb/ 路径下的文 ...
- Centos下Nginx配置WEB访问日志并结合shell脚本定时切割
在一个成熟的WEB系统里,没有日志管理是不可以的,有了日志,可以帮助你得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某个服务或server的性能瓶颈等. ...
- react-refetch的使用小例子
出处:<react设计模式和最佳实践> 作者:米凯莱·贝尔托利 出版时间:2018年8月第1版(还算新) 使用react-refetch来简化api获取数据的代码 const List = ...
- fastdfs安装与配置
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相 ...
- 20135320赵瀚青LINUX第三章读书笔记
第三章 进程管理 3.1 进程 进程的定义: 是处于执行期的程序以及它所包含的资源的总称. 线程的定义: 是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度 ...
- CORE MVC 自定义认证
微软的认证体系,集成了EF,和它的表结构,对于我们已有的系统,或者想高度自定义的人,该怎么办呢? 答案在: https://docs.microsoft.com/en-us/aspnet/core/s ...
- 在Windows下使用Navicat连接Linux下的MySql
Linux下的Mysql安装可以参考菜鸟教程:https://www.runoob.com/mysql/mysql-install.html 安装完成后你会发现用Navicat链接MySql会失败,这 ...