
图论 隐式图
文章平均质量分 62
binling
这个作者很懒,什么都没留下…
展开
-
bfs 模版
player:队列q, marked数组,dist数组,前驱pre数组。这里说数组指的是顶点是按0, V-1编好号的情况,如果没编号,就用一般的symbol table比如map,unordered_map。另外前驱一般情况是多个,即一般应该定义为vector prev[V],而不是int prev[V],如果只求一条最短路径,则可简化为后者。1 start 入队,q.push(start)原创 2015-06-07 13:40:39 · 491 阅读 · 0 评论 -
图论的一些总结
有向图的环判断:当前结点在path中存在, path就是 stack里的结点。marked 正常标记, inStack在进入结点标记,退出前unmark无向图的判断:当前结点的某个扩展结点mark过,且不是当前结点的前驱,因为无向无环图每个结点只有一个前驱,拓扑排序 = 原图后序dfs遍历的reverse order , 也是反图的后序dfs序列。 反图就是原图每条边反向后的图原创 2015-06-11 11:00:55 · 501 阅读 · 0 评论 -
关于marked数组处理
关于marked数组处理,分3种情况1一般的遍历(遍历结点), marked数组一旦标记上就不会再unmark,即一个结点访问一次2有无路径,求任意一条路径,有无环问题, 同1,mark了就不会unmark,因为如果之前经过这个点,没有路径,或者没有环,那么这次也不会有;而如果有路径或者有环,之前就得到结果退出了3所有路径: 是否unmark看情况,如果经过这个点有通路,原创 2015-06-07 14:08:34 · 621 阅读 · 0 评论 -
双向BFS搜索和A*算法
适合给出起点和终点,求最短路径的问题分别从起点和终点扩展,每次选择待扩展节点少的那个方向进行扩展,扩展一层。然后下一轮。int doubleBFS(int start, int end, vector> &G) { vector marked[2] {vector(G.size()), vector(G.size())}; //including dead nodes and to-be原创 2015-12-03 11:22:30 · 4175 阅读 · 0 评论 -
表达式生成问题
题目:给定一个数组,问:这组数进行四则运算(每个数必须用到,且只用一次)可以得到多少个不同的值?如何划分:表达式是一步一步算的,划分的方法就是哪个数先加入和表达式的当前值进行计算,并且有4种计算方式(其实是6种,减法和除法各2种顺序)def uniqueValues(A): ans = set() def dfs(i, value): if i == len(A): ans原创 2015-10-11 22:59:55 · 438 阅读 · 0 评论 -
欧拉路径 LeetCode 332
图中一条路径,包含了所有边(且只包含一次)如果起点和终点是同一个点,则是一种特殊的欧拉路径——欧拉环路求法1:暴力法:遍历所有的路径,如果当前路径长度为总边数,则当前路径是一条欧拉路径,如果一直没有碰到这样的路径,则无解。一个图总共多少条路径(一般是有环的)1)不允许路径里有环,也就是路径里的点都只出现一次的,|V|!(第一个点|V|种选择,第二个|V| - 1种。。 n原创 2016-06-23 14:30:43 · 2302 阅读 · 0 评论