搜索
_pkm_
love coding
展开
-
HIHO #1304 : 搜索一·24点
题目链接数据少,直接暴力,枚举4个数字的排列,然后再枚举3个符号的情况因为4个数字,加括号有以下几个情况: (a b c d ) (a b) c d, a (b c) d, a b (c d) (a b c) d, a (b c d) (a b) (c d) 上面的前6个只是改变了计算的顺序,我们通过数字的排列可以得到,但是最后一个情况是无法得到的,所以要另外判断#include<bi原创 2016-08-27 21:10:32 · 560 阅读 · 0 评论 -
POJ 2449 Remmarguts' Date (A* 第k短路)
题目链接给出n个点,m条边的有向图,问s到t的第k短路长度。使用A*进行计算,每次不判重,把每一个点的相邻的所有状态加入到扩展集合中,判断t出队的次数为k就是k短路。 这里的 A *的H函数我们用单源最短路径计算从t到每个点的最短距离,因为是有向图计算的时候把图反向一下。注意:当s==t的时候,k需要加以1。//#include<bits/stdc++.h> #include<iostream> #原创 2016-08-31 09:51:59 · 283 阅读 · 0 评论 -
HDU 1043 Eight poj 1077 (八数码 启发式搜索)
题目链接 poj1077 hdu1043使用A*搜索就可以了 A*是bfs的一种优化,使用函数F做为每个节点的访问的优先级hdu的需要先判断是否有解,否则会tle,加上后跑了1000+ms poj的不用判断,也可以ac,跑了40+ms一个状态表示成一维的形式,求出除0之外所有数字的逆序数之和,也就是每个数字前面比它大的数字的个数的和,称为这个状态的逆序。 若两个状态的逆序奇偶性 相同,则可原创 2016-08-30 13:11:02 · 456 阅读 · 0 评论 -
HIHO #1308 : 搜索二·骑士问题
题目链接可以直接跑三次bfs,也可以使用18位的二进制表示3个人的状态,一次bfs,因为坐标在0-7,所以一个数字只用3位就够了,然后6个数字,一共18位就够了#include<bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) #define fastIO ios::sync_with_stdio(fa原创 2016-08-29 09:03:55 · 424 阅读 · 0 评论 -
全排列散列,康拓展开
把一个排列,在所有的排列的名次计算出来,以及给出一个名次还原这个排列,一般搜索的时候,用来标记,比如八数码/* O(n*n) 全排列散列,康拓展开,康拓逆展开 n数据范围,a[] 排列数组,下标1开始 ans:排名,0开始 */ int n = 9; void intToArray(int x,int a[]){ bool used[10];cl(used,false); int i原创 2016-08-29 16:32:46 · 706 阅读 · 0 评论