初涉A*剪枝
挖坑防忘,天亮补题解。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map> #pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-8)
#define LL long long
#define ULL unsigned long long LL
#define _LL __int64
#define _INF 0x3f3f3f3f
#define Mod 1000000007 using namespace std; const int MAXN = 100100; struct N
{
int u,v,w,next,ty;
}edge[2*MAXN]; int head[MAXN]; int Top; void Link(int u,int v,int w,int ty)
{
edge[Top].ty = ty;
edge[Top].v = v;
edge[Top].w = w;
edge[Top].next = head[u];
head[u] = Top++;
} int ans[1010]; int w[1010][1010]; int H[1010]; struct Q
{
int v,g,h,f;
bool operator < (const Q &a) const
{
return a.f < f;
}
}; void Init_H(int t)
{
Q s,f;
s.f = 0;
s.v = t; memset(H,-1,sizeof(H));
H[t] = 0; priority_queue<Q> q;
q.push(s); while(q.empty() == false)
{
f = q.top();
q.pop(); H[f.v] = (H[f.v] == -1 ? f.f : H[f.v]); for(int p = head[f.v]; p != -1; p = edge[p].next)
{
if(edge[p].ty == 2)
{
if(H[edge[p].v] == -1)
{
s.v = edge[p].v;
s.f = f.f + edge[p].w;
q.push(s);
}
}
}
}
} void bfs(int h,int e,int k)
{
Q f,s;
priority_queue<Q> q;
f.g = 0;
f.h = H[h];
f.f = f.h + f.g;
f.v = h; q.push(f); while(q.empty() == false)
{
f = q.top();
q.pop(); if(f.g != 0)
{
w[f.v][++ans[f.v]] = f.g; if(f.v == e && ans[f.v] == k)
return ;
} for(int p = head[f.v]; p != -1; p = edge[p].next)
{
if(edge[p].ty == 1)
{
s.v = edge[p].v;
s.h = H[edge[p].v];
s.g = f.g + edge[p].w;
s.f = s.h + s.g;
q.push(s);
}
} } } int main()
{ int n,m; int u,v,ww,i; while(scanf("%d %d",&n,&m) != EOF)
{
memset(head,-1,sizeof(head)); Top = 0; for(i = 0;i < m; ++i)
{
scanf("%d %d %d",&u,&v,&ww);
Link(u,v,ww,1);
Link(v,u,ww,2);
} int s,t,k; scanf("%d %d %d",&s,&t,&k); Init_H(t); memset(ans,0,sizeof(ans)); bfs(s,t,k); if(ans[t] < k)
{
printf("-1\n");
}
else
{
printf("%d\n",w[t][k]);
} }
return 0;
}
初涉A*剪枝的更多相关文章
- α-β剪枝算法的java语言实现(非常实用)
利用α-β剪枝算法,对下图所示的博弈树进行搜索,搜索得到根节点选择的走步,以及没有必要进行评估的节点,并求出给出在何处发生了剪枝,以及剪枝的类型(属于α剪枝还是β剪枝). 注:□表示MIN节点:○表示 ...
- Sicily 1153: 马的周游问题(DFS+剪枝)
这道题没有找到一条回路,所以不能跟1152一样用数组储存后输出.我采用的方法是DFS加剪枝,直接DFS搜索会超时,优化的方法是在搜索是优先走出度小的路径,比如move1和move2都可以走,但是如走了 ...
- HDU5887 Herbs Gathering(2016青岛网络赛 搜索 剪枝)
背包问题,由于数据大不容易dp,改为剪枝,先按性价比排序,若剩下的背包空间都以最高性价比选时不会比已找到的最优解更好时则剪枝,即 if(val + (LD)pk[d].val / (LD)pk[d]. ...
- HDU5937 Equation(DFS + 剪枝)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5937 Description Little Ruins is a studious boy, ...
- alpha-beta剪枝搜索
•一种基于剪枝( α-βcut-off)的深度优先搜索(depth-first search). •将走棋方定为MAX方,因为它选择着法时总是对其子节点的评估值取极大值,即选择对自己最为有利的着法: ...
- POJ1190生日蛋糕[DFS 剪枝]
生日蛋糕 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18236 Accepted: 6497 Description ...
- *HDU1455 DFS剪枝
Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU1010 DFS+剪枝
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- HDU 5113 dfs剪枝
题意:告诉格子规格,颜色个数,以及每个颜色能涂得格子数目,问是否能够实现相邻两个格子的颜色数目不相同. 分析:因为数据很小,格子最多是5 * 5大小的,因此可以dfs.TLE了一次之后开始剪枝,31m ...
随机推荐
- NEERC 2010, Eastern subregional contest
只能把补了的题目放这儿了,先留个坑,怕忘记. Problem G URAL 1806 Mobile Telegraphs 题意是:给定n个电话号码,每个号码是一个长度为10的仅含'0'~'9'的字符串 ...
- solr的原子更新/局部更新
solr支持三种类型的原子更新: set - to set a field. add - to add to a multi-valued field. inc - to increment a fi ...
- S5PV210的IRAM应用
准备分析 IRAM的大小96k,其实前两个程序都在这里运行的,程序都小于16K.要实现的是从把IRAM从的前16k从IRAM的起始地址0xD0020000拷贝到0xD0024000 处,调用mai ...
- MyBatis学习总结2
这一篇讲述MyBatis对数据库的CRUD操作,内容不做重复,只做添加:查看学习总结1 一.使用MyBatis对表执行CRUD操作——基于XML的实现 在SQL映射文件userMapper.xml中添 ...
- jquery ajax cache的问题
function test() { $.ajax({ type:'GET', url:"tt. ...
- sougou输入法小技巧
- JAVA与.NET的相互调用——通过Web服务实现相互调用
JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...
- 基于DDD的现代ASP.NET开发框架--ABP系列之2、ABP入门教程
基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boi ...
- WebService优点和缺点小结
最近做的几个项目都用到了webservice,通过自己的实践和网上资料的汇总,现在做个小结: 当前WebService是一个热门话题.但是,WebService究竟是什么?,WebSer ...
- IIS里面网站停止了,不能启动
IIS里面网站文件夹显示红色的叉叉,停止了,不能启动,所有站点都停止了: 原来是Word wide web publish service 服务停止了,启动就好了