马上又要秋招了,赶紧复习下基础知识。这里复习下二叉树和图的深搜与广搜。从图的遍历说起,图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search)。图搜索的经典应用走迷宫、N皇后、二叉树遍历等。遍历:定义按某种顺序访问“图”中所有的节点。...
分类:
其他好文 时间:
2014-08-24 12:58:32
阅读次数:
8475
深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节...
分类:
其他好文 时间:
2014-08-19 18:29:35
阅读次数:
278
1. 二分搜索详见笔者博文:二分搜索的那些事儿,非常全面2. 矩阵二分搜索(1) 矩阵每行递增,且下一行第一个元素大于上一个最后一个元素(2) 矩阵每行递增,且每列也递增3. DFS 深度优先搜索适用场景:(1) 输入数据:如果是 递归数据结构(如单链表、二叉树),则一定可以使用DFS(2) 求解目...
分类:
其他好文 时间:
2014-08-19 16:12:34
阅读次数:
207
原理和方法可以参考: 图的深度优先遍历教科书上的C代码,递归: 1 //教科书方法,邻接表 2 bool visited[MAX]; 3 void visitFunc(int v); 4 5 void dfsTraverse(Graph G) 6 { 7 for(v = 0; v vis...
分类:
其他好文 时间:
2014-08-17 03:44:27
阅读次数:
243
递归回溯 由于回溯法是对解空间的深度优先搜索,因此在一般情况下可用递归函数来实现回溯法如下:t表示递归深度,即当前扩展节点在解空间树的深度。n用来控制递归深度。当t>n时表示算法搜索到叶节点。void backtrack( int t ){ if ( t>n ) output(x); else fo...
分类:
其他好文 时间:
2014-08-14 23:42:46
阅读次数:
275
题意:给你一个N×M的简单图,其中有门,墙,通道,和文件,打开每扇门必须要有某一把特定的钥匙,问你最多能拿到几个文件解题思路:深度优先,每一次走一个格子将它标记以后都不走,遇到门以后如果有钥匙,将门打开,如果没有,將门加入队列,搜完以后,遍历没有打开的门看是否已经有钥匙了,如果有 从门开始dfs,直...
分类:
其他好文 时间:
2014-08-12 10:06:14
阅读次数:
223
爬山算法爬山算法是一种局部择优的方法,采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策。爬山算法一般存在以下问题:局部最大高地:也称为平顶,搜索一旦到达高地,就无法确定搜索最佳方向,会产生随机走动,使得搜索效率降低。山脊:搜索可能会在山脊的两面来回震荡,前进步伐很小。解决方...
分类:
其他好文 时间:
2014-08-10 15:33:20
阅读次数:
282
知识点:dfs(深度优先搜索)题解:基本的dfs搜索判断可行性问题。一般的dfs搜索,如果不加剪枝,复杂度是指数级的,所以必须要能发掘出优秀的剪枝条件;在本题中,一般有如下剪枝:①:所有线段的长度之和必须为4的倍数;②:搜索之前,把所有线段按从大到小排序,因为长度越长,在拼凑时的灵活度就越低;③:当...
分类:
其他好文 时间:
2014-08-09 18:25:48
阅读次数:
249
很多游戏特别是rts,rpg类游戏,都需要用到寻路。寻路算法有深度优先搜索(DFS),广度优先搜索(BFS),A星算法等,而A星算法是一种具备启发性策略的算法,效率是几种算法中最高的,因此也成为游戏中最常用的寻路算法。直入正题:在游戏设计中,地图可以划分为若干大小相同的方块区域(方格),这些方格就是...
分类:
其他好文 时间:
2014-08-08 20:46:46
阅读次数:
184
图有四种存储结构:数组,邻接表,十字链表,邻接多重表。下面以数组为存储结构来实现图的深度优先搜索遍历和广度优先搜索遍历。其中广度优先搜索遍历中有用到STL中的queue,注意头文件的包含。具体代码如下:
//图的数组(邻接矩阵)存储表示和深度优先遍历
const int MAX_VERTEX_NUM=20; //最大顶点数
typedef enum {DG,DN,UDG,UDN} Graph...
分类:
其他好文 时间:
2014-08-08 12:39:35
阅读次数:
224