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