[poj 2331] Water pipe ID A*迭代加深搜索(dfs)
Water pipe
Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 2265 Accepted: 602
Description
The Eastowner city is perpetually haunted with water supply shortages, so in order to remedy this problem a new water-pipe has been built. Builders started the pipe from both ends simultaneously, and after some hard work both halves were connected. Well, almost. First half of pipe ended at a point (x1, y1), and the second half – at (x2, y2). Unfortunately only few pipe segments of different length were left. Moreover, due to the peculiarities of local technology the pipes can only be put in either north-south or east-west direction, and be connected to form a straight line or 90 degree turn. You program must, given L1, L2, … Lk – lengths of pipe segments available and C1, C2, … Ck – number of segments of each length, construct a water pipe connecting given points, or declare that it is impossible. Program must output the minimum required number of segments.
Constraints
1 <= k <= 4, 1 <= xi, yi, Li <= 1000, 1 <= Ci <= 10
Input
Input contains integers x1 y1 x2 y2 k followed by 2k integers L1 L2 … Lk C1 C2 … Ck
Output
Output must contain a single integer – the number of required segments, or −1 if the connection is impossible.
Sample Input
20 10 60 50 2 70 30 2 2
Sample Output
4
Source
Northeastern Europe 2003, Far-Eastern Subregion
题目链接: id=2331">http://poj.org/problem?id=2331
题意:
在二维网格上给你起点,终点,与(n《=10)的管子(长度与数量)用最少的管子数完毕路径;
思路:由于管子不能切断。所以“盲目”dfs 长路漫漫。。。
仅仅好迭代加深!
——————–分开计算x。y轴————————–
1.预处理*h数组。计算i状态到终点(单维)的最最短路(估价系统)
for(ans=1;ans<=tot;ans++){if(dfs(a,sx,0,0)) break;}
2.“盲目”dfs(+剪枝)到终点(单维)
剪*
if(hv==-1||hv+dep>ans) return 0;
代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct node{
int l,num;
}a[11];
int n,h1[1010],h2[1010],ans;
int tx,ty,sx,sy;
int tot;
void cal(int *h,int pos)
{
queue<int> q;
h[pos]=0;
q.push(pos);
while(!q.empty())
{
pos=q.front();
q.pop();
for(int i=1;i<=n;i++)
{
int nex=pos-a[i].l;
if(nex>0&&h[nex]==-1)
{
h[nex]=h[pos]+1;
q.push(nex);
}
nex+=2*a[i].l;
if(nex<=1000&&h[nex]==-1)
{
h[nex]=h[pos]+1;
q.push(nex);
}
}
}
}
bool dfs(node *a,int x,int dep,int id)
{
int hv;
if(id==0) hv=h1[x];else hv=h2[x];
if(hv==-1||hv+dep>ans) return 0;
if(hv==0)
{
if(id==0) return dfs(a,sy,dep,1);
else return 1;
}
node tmp[10];
for(int i=1;i<=n;i++) tmp[i]=a[i];
for(int i=1;i<=n;i++)
if(tmp[i].num)
{
tmp[i].num--;
int now=x-tmp[i].l;
if(now>0) if(dfs(tmp,now,dep+1,id)) return 1;
now+=2*tmp[i].l;
if(now<=1000) if(dfs(tmp,now,dep+1,id)) return 1;
tmp[i].num++;
}
return 0;
}
void id_a_star()
{
memset(h1,-1,sizeof(h1));
memset(h2,-1,sizeof(h2));
cal(h1,tx);
cal(h2,ty);
for(ans=1;ans<=tot;ans++)
{
if(dfs(a,sx,0,0)) break;
}
if(ans<=tot)
printf("%d\n",ans);
else printf("-1\n");
}
int main()
{
scanf("%d%d%d%d%d",&sx,&sy,&tx,&ty,&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i].l);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i].num);
tot+=a[i].num;
}
if(sx==tx&&sy==ty) printf("0\n");
else id_a_star();
}
[poj 2331] Water pipe ID A*迭代加深搜索(dfs)的更多相关文章
- 迭代加深搜索 POJ 1129 Channel Allocation
POJ 1129 Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14191 Acc ...
- poj 2248 Addition Chains (迭代加深搜索)
[题目描述] An addition chain for n is an integer sequence with the following four properties: a0 = 1 am ...
- BZOJ 1085 骑士精神 迭代加深搜索+A*
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1085 题目大意: 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个 ...
- vijos1308 埃及分数(迭代加深搜索)
题目链接:点击打开链接 题目描写叙述: 在古埃及.人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数.如:2/3=1/2+1/6,但不同意2/3=1/3+1/3,由于加数中有同样的.对于 ...
- POJ1129Channel Allocation[迭代加深搜索 四色定理]
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14601 Accepted: 74 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- 迭代加深搜索 codevs 2541 幂运算
codevs 2541 幂运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 从m开始,我们只需要6次运算就可以计算出 ...
- HDU 1560 DNA sequence (IDA* 迭代加深 搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1560 BFS题解:http://www.cnblogs.com/crazyapple/p/321810 ...
- UVA 529 - Addition Chains,迭代加深搜索+剪枝
Description An addition chain for n is an integer sequence with the following four properties: a0 = ...
随机推荐
- solr DIH 设置定时索引
1 web.xml中加入 web.xml所在目录 /opt/solr-7.7.1/server/solr-webapp/webapp/WEB-INF <listener> <list ...
- 使用Lucene的api将索引创建到索引库中
import org.apache.commons.io.FileUtils; import org.apache.lucene.document.Document; import org.apach ...
- PHP-redis命令之 散列(hashes)
二.散列(hashes) 1.hset:设置散列的值 $redis->hset('myhas','field1','hello'); $redis->hset('myhas','field ...
- android-csv-variants
android-csv-variants https://github.com/zawn/android-csv-variants/ 目的 用于在Android Gradle构建时通过CSV文件配置V ...
- 【转】使用信号监控 Django 模型对象字段值的变化
转载出处:http://blog.csdn.net/pushiqiang/article/details/74949465 Django 信号 (Signals) 的功能类似于 WordPress 的 ...
- 二、harbor部署之部署harbor
1 harbor部署之安装docker 1.yum install -y docker #安装docker 2 harbor部署之安装docker-compose 1.首先检查centos有没有安装p ...
- JSP标签:jsp内置标签、jstl标签、自定义标签
一.jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签 1 ...
- [android开发篇] [应用组件]Intent 和 Intent 过滤器
https://developer.android.com/guide/components/intents-filters.html Intent 是一个消息传递对象,您可以使用它从其他应用组件请求 ...
- soa服务治理
SOA服务治理 文章:SOA 治理简介 文章:中小型互联网公司微服务实践-经验和教训
- Python升级版本2.6到2.7
CentOS 6 系统默认 Python 版本是:2.6.6 平时在使用中遇到很多的库要求是 2.7.x 版本的库,比如使用 ConfigParser 库,在 2.6 版本库就不支持没有 value ...