一、题目说明 题目是46. Permutations,给一组各不相同的数,求其所有的排列组合。难度是Medium 二、我的解答 这个题目,前面遇到过类似的。回溯法(树的深度优先算法),或者根据如下求解: "刷题31. Next Permutation" 我考虑可以用dp做,写了一个上午,理论我就不说 ...
分类:
其他好文 时间:
2020-02-12 10:40:54
阅读次数:
88
此篇文章为实现《算法》一书中提到的大部分无向图算法,分为多篇, 即多个Java文件,可以直接复制,便于学习; 第三篇,java无向图的类实现,此篇主要列出实现的方法,需要参考其他类中方法(后续实现); 参考链接:https://www.cnblogs.com/xiaohuiduan/p/113522 ...
分类:
其他好文 时间:
2020-02-11 11:32:41
阅读次数:
69
一个n*n的国际象棋棋盘上放置n个皇后,这n个皇后两两均不在同一行、同一列、同一对角线上,求合法的方案数。 需要一层一层的搜索,因此采用深度优先搜索思想。 思考:n*n棋盘可用二维数组表示。已知约束条件:皇后均不在同一行、同一列、同一对角线上。 故编码寻找数学关系表达式。 解题一:考虑到每行只能放一 ...
分类:
其他好文 时间:
2020-02-11 10:02:47
阅读次数:
75
dfs深度优先搜索 (注意:题目有思路时要注意搜索边界条件!!!) 1.要判断根结点的子节点是否为空,如果没有子节点,那么深度就是1个根结点。 2.设置一个深度最大值ans,递归搜索得到一个深度值时,若搜索到的深度大于当前ans的值,就更新ans值。 3.要注意,存储子节点时用的是vector容器, ...
分类:
其他好文 时间:
2020-02-10 18:22:52
阅读次数:
66
树的存储(邻接表)和深度优先遍历 //数组的邻接表存储 vector<int> q[maxn]; //这个是一般的 int fi[maxn]; //存储节点的儿子个数 int to[maxn]; //存储节点的具体每个儿子 int ne[maxn]; //指向该节点的下一个儿子 void link( ...
分类:
其他好文 时间:
2020-02-09 09:42:13
阅读次数:
90
试实现邻接矩阵存储图的深度优先遍历。 函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是邻接矩阵存储的图,定义如下: typedef struct GNode *PtrToGNode; struct ...
分类:
其他好文 时间:
2020-02-08 18:01:29
阅读次数:
62
试实现邻接表存储图的广度优先遍历。 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是邻接表存储的图,定义如下: /* 邻接点的定义 */ typedef struct AdjVNode *Ptr ...
分类:
其他好文 时间:
2020-02-08 17:46:51
阅读次数:
81
在写 “广度优先遍历” 的时候,要注意一点:所有加入队列的结点,都应该马上被标记为 “已经访问”,否则有可能会被重复加入队列。 如果等到队列出队的时候才标记 “已经访问”,事实上,这种做法是错误的。因为如果不在刚刚入队列的时候标记 “已经访问”,相同的结点很可能会重复入队 from queue im ...
分类:
其他好文 时间:
2020-02-08 00:49:47
阅读次数:
79
一、技术总结 1. 这一题是BFS广度优先搜索算法,感觉这类题目是首先定义需要的数据结构类型,然后会定义一个数组用于存放数据,还有一个bool类型的数组看是否已经放入队列中了。然后再编写一个判断函数judge()排除数组中超出范围的数字返回false,还有就是不满足条件或者是已经在队列中的,最后就返 ...
分类:
其他好文 时间:
2020-02-07 23:56:59
阅读次数:
127
深度优先遍历(Depth First Search): 自顶点起, 往下一个邻近点走,一直走,走不动了,退回一部。这样反复; /*深度优先遍历三种方式*/ let deepTraversal1 = (node, nodeList = []) => { if (node !== null) { nod ...
分类:
其他好文 时间:
2020-02-07 22:23:41
阅读次数:
68