我的意思是有向图可以有一个自循环,所以我不明白为什么一个无向图不能有它(CLRS说如果没有一个有效的理由它是被禁止的)。
Example:
G_directed = (V,E) is a directed graph
Say this graph has the vertex set V = {1,2,3,4,5,6}
With edges E = {(1,2),(2,2),(2,4),(2,5),(4,1),(4,5),(5,4),(6,3)}
-----------------------------------------------------------------
Say
有向图和无向图上的bfs在实现上有何不同。
我在网上发现了以下伪码。我对无向图没意见。但不知道如何为有向图实现它。
frontier = new Queue()
mark root visited (set root.distance = 0)
frontier.push(root)
while frontier not empty {
Vertex v = frontier.pop()
for each successor v' of v {
if v' unvisited {
frontier.push(v')
我一直在加深对LeetCode上无向图与无向图问题的算法的理解。我意识到的关键区别是对于像841 Keys and Rooms这样的问题,因为这是定向的,所以我需要将"0“节点添加到set集合中。特别是前面的这一行: seen_rooms.add(0) 另一方面,对于547. Number of Provinces,因为这个图是无向的,所以我从来不需要在“早期”添加它。我可以稍后将它添加到我的循环中 问题547: class Solution():
def findCircleNum(self, A):
#Finds your neighboring cities
我有一个由数百万个不连通的子图组成的图。现在我正在尝试找出所有这些子图的节点数。例如,假设我有一个包含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
然而,它的速度非常慢,根本不适合有数百万个节点的图,因此我想知道是否可以用一种更快的方式完成这项工作。
我希望能够在有向图和无向图中找到所有圈。
如果有向图中存在循环或不存在循环,下面的代码将返回真假:
def cycle_exists(G):
color = { u : "white" for u in G }
found_cycle = [False]
for u in G:
if color[u] == "white":
dfs_visit(G, u, color,