I studied the union find algo and found it is very useful in following ways.
to find out if 2 node are connected or not
to compress the path. (save space)
if the problem is to find if 2 node connected or not , then we can use union
find.But if we have to find out the path between
我有一个图G(V,E),如果存在,我必须计算包含e (边属于E)的最小生成树。我在想,我可以使用Kruskal算法,在列表的顶部插入圆弧e,以便算法首先选择这个弧线,然后构建包含e的树。这是正确的推理方式吗?如果包含e的MST不存在,则忽略弧吗?
这是我想要更改的java代码:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;
public class KrushkalMST {
static class Edge {
int source;
算法
For each edge (u, v) in the Adjacency list:
If u and v do not belong to the same set:
Union(u, v)
else:
return true // cycle detected
return false
图
(1)-(2)
邻接表
1个-> 2
2个-> 1
不相交集
{1},{2}}
迭代1
边e= (1,2)
工会(1,2)
不相交集={1,2}
迭代2
边e= (2,1)
2和1都属于同一个集合,因此该算法检测一个循环。很明显,图不包含循环。
该算法对有向图是完美的。请帮
如何在地图上找到森林的所有簇?我有简单的类单元格(类型是枚举{河流,森林,草,山})
class Cell{
public:
Type type;
int x;
int y
};
并像vector<Cell> grid一样绘制地图。有没有人能给我推荐一个算法来创建list<list<Cell>> clusters,其中list包含同一集群中的森林单元(集群是一组连接的单元-连接可以是八个方向:向上,向下,向左,向右,up_right,up_left,down_left,down_right)?我需要在地图上找到森林的所有集
我正在尝试实现Kruskal的算法,在Python中找到一个最小生成树来解决一个在线法官的问题,但是我遇到了时间限制问题。该问题以递增的顺序给出一系列边,并询问是否有可能生成最小生成树。完整的问题规范可以看到
下面是我的问题代码:
import sys
raw_input = sys.stdin.readline
line = map(int, raw_input().split())
n = line[0]
m = line[1]
dict1 = {}
lists = []
for i in xrange(1, n + 1):
dict1[i] = set([i])
for i
我有一个由数百万个不连通的子图组成的图。现在我正在尝试找出所有这些子图的节点数。例如,假设我有一个包含A-B-C,D-E,F-G-H的图。所以返回值是3,2,3。
现在,我可以使用以下查询来执行此操作:
MATCH (n) CALL apoc.path.subgraphNodes(n, {}) YIELD node WITH n , count(node) as nodesnum return nodesnum
然而,它的速度非常慢,根本不适合有数百万个节点的图,因此我想知道是否可以用一种更快的方式完成这项工作。
使用以下函数,我可以生成一些测试数据。
import random, string
a = list(string.ascii_lowercase)
def gen_test_data():
s = []
for i in xrange(15):
p = random.randint(1,3)
xs = [random.choice(a) for i in xrange(p)]
s.append(xs)
return s
这是我的测试数据。
[
['a', 's'],
[