紫书第七章暴力求解
santiago1
struggle
展开
-
IDA* uva 旋转游戏(the rotating game)
显然直接枚举全排列数据太大了,而且有很多不必要的操作。这是一道明显的状态搜索题,那么该采用什么方法呢? bfs?迭代bfs?A*?还是双向bfs这题用双向bfs和a都可以做出来,但是相比之下,A会比双向bfs快一点。既然选择了a*就要考虑如何找启发式函数了,经过分析,每次经过一次旋转的话对于一个状态的改变量只有1个(不是3个!一开始自己以为是3个状态改变就错了),因为这个是与顺序无关的,比如...原创 2019-07-30 03:18:32 · 176 阅读 · 0 评论 -
枚举排列与二进制求子集
这个是枚举排列的方法。void printfpermutation(int n, int*a, int cur) { if (cur == n) { for (int i = 0; i < n; ++i) cout << a[i]<<" "; cout << "\n "; } else for (int i = 0; i < n...原创 2019-07-27 22:59:12 · 187 阅读 · 0 评论 -
uva1601the morning after hallowee(双向BFS经典题)
关于bfs代码里面已经详细注释了,对于这个题,个人理解是除了双向bfs加深了理解以外,更需要注意的是隐式图的建立和一种直觉吧。怎样能看出隐式图,和如果建立,还需要多磨砺。#include<iostream>#include<queue >#include<algorithm>#include<cstring>using namespace ...原创 2019-07-28 04:12:14 · 338 阅读 · 2 评论 -
Uva11212 编辑书稿
对于启发式函数搜索的话,关键要想明白如何剪枝,这里参考了以下文章并附上代码:https://blog.csdn.net/jc514984625/article/details/51785439#include<cstdio>#include<cstring>using namespace std;const int maxn = 9;int n, a[maxn]...转载 2019-07-28 04:41:47 · 123 阅读 · 0 评论