搜索
文章平均质量分 76
carter91620
这个作者很懒,什么都没留下…
展开
-
hdu1426---DFS
//把‘?’提取出来,搜索时检查,这是很暴力的方法,小菜仅会如此;听说还有更高的做法,以后研究了。 #include #include #include #include #define N 11 #define M 210 using namespace std; int n,m,t,sumf; int map[N][N]; char str[2]; struct TNode { int x原创 2012-03-19 13:31:11 · 469 阅读 · 0 评论 -
poj2046---BFS
好吧,表示这道题hash不会用,其实有很多题hash我都不会写= =!是用set判重的,空间占用很大,时间也不少。 写了个启发函数,其实也不算什么启发,就是在节点里保存距最终状态还有多少步step,并按step从小到大排序,用优先队列保存,囧,,不料wa了,不知哪里挫了。。。 #include #include #include #include #include #include #incl原创 2012-04-01 18:28:16 · 1287 阅读 · 0 评论 -
poj3740---dancing links
第一道dancing links题,不免有点套模板之嫌。原理理解了,现在就是缺乏熟练度,多多练习,嗯= = 可是把这道水题A了,Sudoku的模型还是没有办法建,太笨了我,水货菜鸟一个啊,,,,,, #include #include #include #include using namespace std; #define maxn 611 #define maxm 6611 int原创 2012-03-29 14:45:40 · 654 阅读 · 0 评论 -
hdu1560---IDA*
//因为每个串的长度不超过5,最多8个串,所以最短公共母串最长为40,所以IDA*搜索不超过40次 #include #include #include using namespace std; int n,m,t; char str[9][6],dna[5]= {'A','C','G','T'}; int len[9],tp[9]; bool dfs(int ps[],int ds,int d原创 2012-03-12 14:41:57 · 734 阅读 · 0 评论 -
hdu2918---IDA*
//不用剪枝,直接的 #include #include #include using namespace std; int n,m,t; char str[12]; int ans[10]; bool fit(int mid[]) { for(int i=1;i<10;i++) { if(mid[i]!=i) return 0; } retu原创 2012-03-12 14:29:15 · 539 阅读 · 0 评论 -
poj3635---BFS
求最短路。搜索题一般难在如何剪枝和判重上,如果这两个都解决的话,搜索题就变成水题。 这道题求的是从起始点到终点的最小花费,如果每次都把0~cap的油量都预先存储的话,必定会有很多不必要的操作,会很耗时。 如果每次在一个位置只加1V油量,那么就会节省大量的时间开销。#include #include #include #include #include #include using namesp原创 2012-03-28 16:21:23 · 1510 阅读 · 0 评论 -
poj2449---BFS+Astar
寻找第k短路。看到这道题时,很快就想到了思路,但就是实现不了。看了discuss,可以先用dijkstra求出最短路作为估价函数,在astar来实现求出第k短路,而astar最惯常做法是用优先队列保存节点。 用TPoint来保存astar里的节点,其中to是指向的位置,dis代表当前节点中已经过的距离,all是到目标的总距离。 #include #include #include #inclu原创 2012-03-28 14:50:36 · 941 阅读 · 0 评论 -
hdu1813---IDA*
//首先把每个在能走点走出去的最小步数求出并保存 //在进行dfs时,求h()时,即是求当前存在的节点走出去的最小步数中最大者 //其他地方和IDA*题一样处理即可,此题就是多了个预处理,首先在记忆化搜索一遍,然后在IDA* #include #include #include #include #define inf 12345678 using namespace std; int n,m,原创 2012-03-12 20:45:15 · 607 阅读 · 0 评论 -
poj2286---IDA*
//很纯很纯的IDA*,在dfs时,要判断当前剩下的深度和中间出现个数最大值做比较 //函数fit---目标状态是否已经存在 //函数count---统计中间8个位置1、2、3出现的个数,并返回最大值 //函数isok---是否之前旋转相冲突 //函数swap---旋转 #include #include #include using namespace std; int ans[25原创 2012-03-10 23:16:58 · 590 阅读 · 0 评论 -
hdu2234---IDA*
//又是简单的IDA*,注意是每一行或每一列都相等,不是某一行或某一列都相等,这个地方WA了几次 #include #include #include using namespace std; int n,m,t; int map[17]; int count(int mid[],int a,int b,int c,int d) { int cnt[5]={0,0,0,0,0};原创 2012-03-11 22:20:47 · 814 阅读 · 0 评论 -
hdu2452---记忆化搜索
//一颗树,边是单向的,每个节点有一定的权值,要你从根节点走到叶子节点,走到第偶数节点时,使后面的权值和最小;走到第奇数节点时,使后面的权值和最大 //边链表存储,并查集查找根节点 //用val[i][0]表示第i个节点是偶数节点的值和val[i][1]表示第i个节点是奇数节点的值 //递归的计算,因为节点很多,所以要记忆化搜索 #include #include #include us原创 2012-03-10 16:41:46 · 562 阅读 · 0 评论 -
hdu3779---记忆化搜索
//两列火车入站,重新排列的车厢符不符合要求 //记忆化搜索,ans[i][j]记录的是第一列火车的第i节和第二列火车的第j列在组合后的序列里找不找的到 //如果找的到就标记为1,因为是从前到后搜索,所以在ans[n][m]=1时,表示符合 #include #include #include using namespace std; #define N 1005 bool ans[N][原创 2012-03-10 14:51:41 · 719 阅读 · 0 评论 -
hdu2514---DFS
//简单的DFS,题目要求都给你了,照着写就好了 #include #include #include #include #define N 11 #define M 210 using namespace std; int n,m,t,sumf; int map[N],ans[N]; bool vis[N][N],used[N]; void init() { memset(vis,0,siz原创 2012-03-19 13:34:51 · 434 阅读 · 0 评论