搜索
兜率工
XJTU 硕士研究生在读
展开
-
POJ - 2893 M × N Puzzle (八数码问题是否有解)
题意:就是通过移动空格(用0代替)使得原来状态变成有序的1234......0分析:以数组为一维的举例子.将八数码的一个结点表示成一个数组a[9],空格用0表示,设临时函数p(x)定义为:x数所在位置前面的数比x小的数的个数,其中0空格不算在之内,那设目标状态为b[9],那r=sigma(p(x)) sigma()表示取所有的x:1-8并求和,那对于初始状态a[9],t=sigm...原创 2019-07-31 18:09:09 · 399 阅读 · 0 评论 -
POJ 1270 UVA 124 (拓扑排序---删边法)
题解报告说是用拓扑排序,删边法求解。 但菜鸡的我还是不会做, 其实感觉还是dfs,但关键在与如何将约束条件实现,所以转而采用图的形式进行思考,约束条件即为有向边,并将每一个节点设置入度,入度为零的点自然先输出,接着将入度为零的点所连接的节点入度减一,再接着dfs,这样约束条件的问题就很好的解决了。#include<iostream>#include<cstdio>...原创 2018-06-02 15:52:04 · 275 阅读 · 0 评论 -
POJ 2383 (邻接表+bfs)
直接list建立邻接表,因为list插入删除操作比较快。 因为是无向图,所以两个节点得互相插入。 刚开始用dfs判断的是否能联通,但RE了,思想没问题,应该是爆栈了。 后来改用bfs实现,用了STL 里面的队列,有事一发TLE,一番无奈下,改用自己实现的队列进行操作,成功AC 还得注意过程中访问过的点要进行标记,因为重复访问会造成死循环。 AC代码如下:#include<i...原创 2018-06-16 16:25:48 · 345 阅读 · 0 评论 -
UVA 10687 (DFS)
题目说如果有多个站符合题意,就先选最西边,再选最南边。 刚开始没有太懂得他的意思,样例都懂不了,后来看了大神的代码,才明白是按x,y排序。 按照题意排序规则如下: 1.先找最接近的点。 2.如果距离相等,就先按x从小到大进行排序,再按照y从小到大排序。 对访问过的点进行标记, 从最开始的站进行搜索。返回值是搜索到的站的个数 从而判断输出结果。 由于每次到一个站都要进行排序,有点繁琐...原创 2018-06-16 11:04:38 · 292 阅读 · 0 评论 -
POJ 1416 (dfs求值问题)
自己做的: 0MS 就是有点繁琐,wa了几次#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<map>#include<vector>#include&原创 2018-06-16 00:07:10 · 177 阅读 · 0 评论 -
POJ 3009 (dfs)
不能被题目的这种纸老虎吓到,就是很平常的一个搜索,就是加了个限定条件是每次搜索只能走一行或者一列,相信自己一定能写出来的。 wa了半天,dfs里面直接判断mmp[i][j]是否能够等于一了,忘了下标会越界。。。。#include<iostream>#include<cstdio>#include<algorithm>#include<cst...原创 2018-06-15 20:01:29 · 241 阅读 · 0 评论 -
UVA 291 (dfs)
#include<iostream>#include<stdio.h>#include<algorithm>#include<cstring>#include<queue>using namespace std;int m[6][6];void fun(){ memset(m,0,sizeof(m)); ...原创 2018-06-01 21:22:55 · 194 阅读 · 0 评论 -
POJ 3083 (bfs+dfs)(沿左边+沿右边+最短路)
刚开始看到沿着左边走跟沿着右边走,一脸懵逼。。。。 看了题解还是不懂。 参考了别人博客。 参考博客#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<map>#incl...原创 2018-06-15 00:01:43 · 225 阅读 · 0 评论 -
POJ 2488 (dfs)
注意字典序。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<map>#include<vector>#include<cmath>原创 2018-06-14 19:12:44 · 351 阅读 · 0 评论 -
POJ 2251 (BFS)
很典型的一种BFS裸题。 直接怼就行#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<map>#include<vector>#include<原创 2018-06-14 11:12:25 · 174 阅读 · 0 评论 -
UVA 208(dfs+剪枝)
刚开始做的时候没有剪枝,直接上来就是dfs,因为这种题太熟悉,估计像我这种菜鸡做这种题不带思考,直接上来就是dfs。 在TLE的一发后,意识到给的数据可能是个稠密图,dfs次数过多,肯定要超时,所以就得剪枝了,那么怎么减呢,很简单,先思考为什么会导致dfs次数过多,因为dfs了很多不必要的点,所以就是对不必要的点进行修剪,而判断一个点为不必要的点,那么这个点也就是肯定dfs到不了终点,现在看就有...原创 2018-06-14 01:18:49 · 302 阅读 · 0 评论 -
POJ 2935 (BFS)
可以将图看成每一条边都是一个节点,这样就将6*6的图构成13*13的一个图,然后模拟即可。#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;algorithm&gt;#include&lt;cstring&gt;#include&lt;string&gt;#include原创 2018-06-13 22:13:23 · 191 阅读 · 0 评论 -
UVA 627 (Floyd最短路)
根据题目描述,很显然就是Floyd的思想,所以直接上来怼就行啦。。 熟悉Floyd思想,不明白的可以看这里Floyd-Warshall AC代码如下:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>...原创 2018-06-16 18:14:39 · 289 阅读 · 0 评论 -
AOJ ALDS1_13_A 8 Queens Problem
因为题目给定了两个皇后的位置,相当于一个限制条件。在dfs进行搜索的时候,先不用判断是否在这行的皇后在这个位置上。把所有的情况都搜索出来,然后在输出的时候进行判断即可,最坏情况下就相当于求八皇后问题的所有解。AC代码:#include<iostream>#include<cstdio>#include<algorithm>#include&l...原创 2018-07-17 08:56:17 · 158 阅读 · 0 评论 -
CCF 201803-4 棋局评估
博弈论之前还没学到。。。不会啊这题参考了一篇博客:https://blog.csdn.net/xbb224007/article/details/79935167#include<bits/stdc++.h>using namespace std;int mp[3][3];bool hang(int i,int f){ return mp[i][0]=...原创 2018-09-13 21:12:02 · 250 阅读 · 0 评论 -
超大背包问题(折半枚举)
超大背包问题:有n个重量和价值分别为w[i]和v[i]的物品,从这些物品中挑选总重量不超过W的物品,求所有挑选方案中价值总和的最大值。其中,. 这个问题是背包问题。不过这次价值和重量都可以是非常大的数值,相比之下,比较小。使用DP求解背包问题的复杂度是O(nW),因此不能用来解决这里的问题。此时我们应该利用n比较小的特点来寻找其他办法。 挑选物品的方法...原创 2018-08-29 14:02:05 · 1484 阅读 · 2 评论 -
POJ 2785 (折半枚举)
问题规模较大时,无法枚举所有元素的组合,但能够枚举一半元素的组合,此时,将问题拆成两半后分别枚举,再合并他们的方法往往有效。像这道题,如果直接枚举,那么时间复杂度就是n的4次方,而如果拆分成两个部分,ab跟cd分开枚举,然后二分搜索,那么时间复杂度就降低到了n方×logn,#include<iostream>#include<cstdio>#include&l...原创 2018-08-29 09:53:35 · 378 阅读 · 0 评论 -
POJ 1376 Robot
因为机器人走的是格子上的线,而题目给的机器人的坐标是他的左上方,所以进行构图的时候可以从1,1点进行构图,方便理解,格子上的线看成从0,0点开始的,从而进行构图,每块格子跟格子上线一一对应。ac代码:#include<iostream>#include<queue>#include<cstring>using namespace std;c...原创 2018-07-22 16:44:17 · 236 阅读 · 0 评论 -
UVA 10838 (alpha-bate剪枝搜索)
可以看这三个博客,alpah-bate算法基本上就能懂了:https://blog.csdn.net/zkybeck_ck/article/details/45644471https://blog.csdn.net/zkybeck_ck/article/details/45645031https://blog.csdn.net/tangchenyi/article/details/2...原创 2018-07-25 08:58:43 · 273 阅读 · 0 评论 -
K短路
SPFA算法+A*启发式搜索。1.考虑建立反图,然后跑最短路算法得到以tt为根的最短路径生成树。2.A*启发式搜索计算第K最短路的长度。注意:1.最多求出经由的K条路,若大于K条路,就不再往下走了 2.如果起点终点相同,则K+1以POJ 2449为模板的S->T的K短路。#include<cstdio>#include<que...原创 2018-07-24 14:17:49 · 204 阅读 · 0 评论 -
UVA 10603 倒水问题
因为要求某一个水量为D的时候的最少倒水总量,很显然是一道BFS既可以模拟六种倒水何况在过程中进行定界,对越界的进行剪枝dp数组就起到了这个作用,同时res数组是决定最终结果而设立的一个数组。同时配和dp进行剪枝。ac代码:#include<cstdio>#include<queue>#include<cstring>#include&...原创 2018-07-23 21:41:34 · 205 阅读 · 0 评论 -
Heuristic Search - 15 Puzzle (16宫格)(A*+DIA*)
两种方法都是曼哈顿法迭代加深采用dfs,为了防止爆栈。A*采用bfs迭代加深(IDA*)#include<bits/stdc++.h>using namespace std;#define N 4#define N2 16#define LIMIT 100int dx[4]={0,-1,0,1};int dy[4]={1,0,-1,0}; ...原创 2018-07-17 17:58:21 · 1109 阅读 · 0 评论 -
AOJ Heuristic Search - 8 Puzzle (九宫格+康托展开排重)
bfs进行解决。刚开始想用map进行判重,结果重载运算符那块卡了半天,又学了康托展开进行判重,bfs好长时间没写了,卡了半天,在for循环中下一步竟然受到上一部影响,太失误了。。。。。。ac代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring...原创 2018-07-17 11:20:05 · 249 阅读 · 0 评论 -
最少转机——图的广度优先遍历
该题广度优先搜索相对于深度较快。实现代码如下:#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <math.h>using namespace std;int book[101],n,m,e[101][101]...原创 2018-02-24 17:14:50 · 241 阅读 · 0 评论 -
八皇后问题(模板)
void dfs(int cur,int sum){ if(cur==8) { if(maxi<sum) maxi=sum; return ; } for(int i=0;i<8;i++) if(!book[0][i]&&!book[1][cur+i+1]&...原创 2018-03-08 20:14:29 · 270 阅读 · 0 评论 -
UVA 750 八皇后·(2)+ 预处理+递归
#include<stdio.h>#include<string.h>#include<iostream>#include<vector>#include<set>#include<map>#include<queue>#include<ctype.h>#include&原创 2018-03-10 19:56:26 · 323 阅读 · 0 评论 -
POJ 1321(棋盘问题)
#include<stdio.h>#include<string.h>#include<iostream>#include<vector>#include<set>#include<map>#include<queue>#include<ctype.h>#include&原创 2018-03-17 18:33:57 · 148 阅读 · 0 评论 -
城市地图——图的深度优先遍历
代码实现:#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <math.h>#include <float.h>using namespace std;const int inf=999999;...原创 2018-02-24 16:12:46 · 374 阅读 · 0 评论 -
图的邻接矩阵存储法 (DFS实现)
参考啊哈算法P131#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <math.h>#include <float.h>using namespace std;int book[100],sum...原创 2018-02-24 12:07:26 · 1110 阅读 · 0 评论 -
水管工游戏
一 题目一块矩形土地被分为N*M的单位正方形,现在这块土地上已经埋设有一些水管,水管将从坐标为(1,1)左上角左部边缘,延伸到(N,M)右下角右部边缘。水管只有2种,如下图所示。 每种管道将占据一个单位正方形土地。你现在可以旋转这些管道,使得构成一个管道系统,即创造一条从(1,1)到(N,M)的连通管道。标有树木的方格表示这里没有管道。如下图:一个5*4的土地中(2,4)处有一个树木。 我们可以...原创 2018-02-23 08:29:30 · 481 阅读 · 0 评论 -
将1~9放入9个[]中,使得[][][]+[][][]=[][][]等式成立(dfs)
#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <math.h>#include <float.h>using namespace std;int book[10],total,a[10];...原创 2018-02-21 21:19:09 · 1473 阅读 · 1 评论 -
全排列 DFS实现
//全排列;//啊哈算法深度优先搜索。//p78.#include<stdio.h>int a[10],book[10],n;void dfs(int step){ if(step==n+1) { for(int i=1;i<=n;i++) printf("%3d",a[i]); print...原创 2018-02-13 22:53:52 · 555 阅读 · 2 评论 -
dfs(深度优先搜索)模板
理解深度优先搜索,关键在于:当下该如何做。即下一步如何做。void dfs(int step){ //判断边界。 //尝试每一种可能for(i=;i<=n;i++) { //继续下一步 dfs(step+1); } return;}...原创 2018-02-13 23:05:33 · 890 阅读 · 0 评论 -
八皇后问题
1.计算最多有多少种摆法;#include<stdio.h>#include<string.h>#include<iostream>#include<vector>#include<set>#include<map>#include<queue>#include<ctype.h&原创 2018-03-08 20:13:59 · 142 阅读 · 0 评论 -
UVA532 POJ2251 ZOJ1940 Dungeon Master
做了这个题我把dfs跟bfs又温习了一遍,明白了什么时候该用dfs什么时候改用bfs,详情请戳这里,下面附上dfs跟bfs代码,但dfs代码是个TLE的 TLE代码:#include<stdio.h>#include<string.h>#include<iostream>#include<vector>#include<set&g...原创 2018-03-20 23:04:46 · 189 阅读 · 0 评论 -
图的邻接矩阵存储法 (BFS)
参考啊哈算法P134#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <math.h>#include <float.h>using namespace std;int book[100],sum...原创 2018-02-24 15:02:00 · 521 阅读 · 0 评论 -
HihoCoder - 1478(水陆距离)
#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;vector&gt;#include&lt;set&gt;#include&lt;map&gt;#include&lt;queue&gt;#include&lt;ctype.原创 2018-03-17 18:36:46 · 242 阅读 · 0 评论 -
POJ3278 HDU2717 Catch That Cow【BFS】
需要注意的是走过的点进行标注就不再继续走下去。否则会造成错无,同时需要判断这点在不在0-200000的范围内,并且判断条件在该点是否走过了的的前面。 ac代码:#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;iostream&gt;#include&lt;vector&gt;#include&原创 2018-03-21 15:11:02 · 117 阅读 · 0 评论 -
POJ3414 Pots【倒水问题+BFS】
#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;iostream&gt;#include&lt;vector&gt;#include&lt;set&gt;#include&lt;map&gt;#include&lt;que原创 2018-03-21 23:43:36 · 925 阅读 · 0 评论 -
bfs输出路径方法总结
在结构体中定义 定义一个结构体数组原创 2018-03-21 23:46:10 · 2635 阅读 · 0 评论