IDA*算法,迭代加深搜索和A*算法的结合 。
迭代加深搜索适用于那些没有明显深度上限的题目,将深度从小到大枚举,直到找到最优解 ,减小了深搜的盲目性 。
A*算法需要一个乐观估价函数,在这个函数里寻找一个代价最小的点去搜索,所以时间复杂度都浪费在这个上面了 。
其实我照着紫书上巧的,感觉很容易,实际上其中的算法思想是要静下心来仔细研究的,练ACM这么久了,深深感到这个竞赛是那么的迷人,又是...
分类:
编程语言 时间:
2015-08-04 21:06:59
阅读次数:
163
就是个暴力,和八皇后很像,但是还是要加一些的剪枝的。1.最裸的暴搜6.420s,差点超时2.之前位置放过的就没必要在放了,每次从上一次放的位置开始放0.400s#include#includeconst int maxn = 11;char G[maxn][maxn];int maxd;int n,...
分类:
其他好文 时间:
2015-07-31 12:22:40
阅读次数:
926
一开始写了个 BFS 然后就 T 了...这道题是迭代加深搜索 + A*------------------------------------------------------------------------------#include#include#include#include#def...
分类:
其他好文 时间:
2015-07-09 12:38:55
阅读次数:
157
搜索算法问题求解一、需求分析分别用深度优先、迭代加深、一致代价、A*搜索算法得到从起始点Arad到目标点Bucharest的一条路径,即为罗马尼亚问题的一个解,在求解的过程中记录每种算法得到的解,即输出每种解得到的条路径。图一:罗马尼亚地图二、详细代码测试类:/**Main类,打印各个算法的结果* ...
分类:
编程语言 时间:
2015-06-16 16:14:43
阅读次数:
288
搜索算法问题求解
一、需求分析
分别用深度优先、迭代加深、一致代价、A*搜索算法得到从起始点Arad到目标点Bucharest的一条路径,即为罗马尼亚问题的一个解,在求解的过程中记录每种算法得到的解,即输出每种解得到的条路径。
图一:罗马尼亚地图
二、详细代码
测试类:
/**Main类,打印各个算法的结果
* @author dyl * */classMain{...
分类:
编程语言 时间:
2015-06-07 12:38:04
阅读次数:
155
a[0]=1; a[1]=2;
之后每个数可以由前面的任意两个数相加得到(可以是同一个数),问得到数字N的最短序列
N最大为100,迭代加深搜索打表
#include "stdio.h"
#include "string.h"
int w;
int pri[110][15]; // 记录答案
int len[110]; // 数字N所需长度
int seq[110]; // DFS的每一...
分类:
其他好文 时间:
2015-04-28 11:45:13
阅读次数:
103
样例输入:495 499
样例输出:495/499 = 1/2+1/5+1/6+1/8+1/3992+1/14970
规则是加数少比加数多好,加数相同,小的数越大越好。
分析:回溯无限,宽度优先便利一层都跑不完,所以用迭代加深搜索(iterative deeping):从小到达枚举深度上线maxd,枚举上限还可以减枝。
IDA*算法:深度上线maxd,当前节点n的深度为g(n),乐观估价...
分类:
其他好文 时间:
2015-04-27 15:19:09
阅读次数:
118
迭代加深搜索
迭代加深搜索(Iterative Deepening Depth-First Search, IDDFS)经常用于理论上解答树深度上没有上界的问题,这类问题通常要求出满足某些条件时的解即可。比如在“埃及分数”问题中要求将一个分数a/b分解成为若干个形如1/d的加数之和,而且加数越少越好,如果加数个数相同,那么最小的分数越大越好。下面总结一下该方法的一般流程:
(1)概述:迭代加深...
分类:
其他好文 时间:
2015-04-12 09:22:44
阅读次数:
157
1.题目描述:点击打开链接
2.解题思路:本题利用迭代加深搜索解决。好久没做这个专题了,感觉这种方法有点力不从心,不会寻找估价函数是硬伤。。。只好学一学别人的代码。
本题要求棋盘中间的8个方格都要是相同的数字。紫书上说是利用状态空间搜索解决,大致模板还是八数码问题的模板。但是写了半天最后WA了,感觉这道题用那个模板写出来会很复杂。最后看别人的代码,才发现大多都是利用迭代加深搜索解决的,代码量也...
分类:
其他好文 时间:
2015-04-11 18:01:30
阅读次数:
161