Java 到达图形数据结构中的所有节点

Java 到达图形数据结构中的所有节点,java,algorithm,data-structures,graph,graph-algorithm,Java,Algorithm,Data Structures,Graph,Graph Algorithm,比如说,我有一个分别有顶点和边列表的图形对象。G={V,E} G={[3,4,1,2,5,6],[3->4,1->2,1->5,5->4,5->6]} 假设图是未加权且无方向的,我需要确定所有的顶点是否相互连接,即没有孤立的单个节点或互连节点 1 -- 2 | 5 -- 4 -- 3 | 6 它是否与使用DFS或BFS遍历图形有关?请帮我解决这个问题,谢谢。您也可以使用。在wiki中,其定义为: 在图论的数学领域中,连通无向图G的生成树T是由G的所有顶点和部分(或全部)边组成的树。

比如说,我有一个分别有顶点和边列表的图形对象。G={V,E}

G={[3,4,1,2,5,6],[3->4,1->2,1->5,5->4,5->6]}

假设图是未加权且无方向的,我需要确定所有的
顶点是否相互连接
,即没有孤立的单个节点或互连节点

1 -- 2

|

5 -- 4 -- 3

| 

6

它是否与使用DFS或BFS遍历图形有关?请帮我解决这个问题,谢谢。

您也可以使用。在wiki中,其定义为:

在图论的数学领域中,连通无向图G的生成树T是由G的所有顶点和部分(或全部)边组成的树。

图:生成树(来源:)

如果你想找,可以是个不错的选择。 代码段示例:

MST-Prim(G,r)
01 for each vertex u element of G.V
02    u.key :=infinity
03    u.parent := NIL
04 r.key := 0
05 init(Q, G.V)   // Q is a priority queue
06 while not isEmpty(Q)
07    u := extractMin(Q)   // add u to T
08    for each v element of u.adj do
09        if v element of Q and w(u,v) < v.key then
10        v.key := w(u,v)
11          modifyKey(Q,v)
12          v.parent := u
MST-Prim(G,r)
对于G.V.的每个顶点u元素为01
02 u.键:=无穷大
03 u.父项:=零
04右键:=0
05 init(Q,G.V)//Q是优先级队列
06虽然不是空的(Q)
07 u:=extractMin(Q)//将u添加到T
08对于u.adj do的每个v元素
09如果Q的v元素和w(u,v)
更新:

可以找到Prim算法的解释

有关最小生成树的更多信息可用

  • 以一个垂线为起点
  • 从垂直方向启动BFS/DFS
  • 检查是否访问了所有垂直通道

  • 一个类似的问题在本文中得到了回答

    由于您询问图形是否已连接,因此向脚本添加以下函数:

    def isGraphConnected(graph):
        return get_connected_components_number(graph)==1
    

    是的,可以使用BFS/DFS解决此问题。
    您可以在这两个节点和任何起始节点中选择任何搜索算法,如果通过搜索技术(DFS或BFS)未到达至少一个节点,则表示存在一个或多个断开连接的组件,并且一些单独的节点或互连节点被隔离。但这并不能告诉您存在多少断开连接的组件,为此,您必须使用其他未访问的节点再次开始遍历

    如果图是无向的,DFS/BFS将为您提供从给定起始节点可访问的所有节点。在此运行期间未访问的节点未连接到此组件。阅读wiki页面了解更多信息。如果OP只是想检查图形是否连接,这不是有点复杂吗?@Baz-yup,没错。但它是用于此目的的最流行的算法之一。如果要对图的问题进行编码,迟早要学会这一点。连通图G的生成树也可以定义为G的不含圈的最大边集,或者
    作为连接所有顶点的最小边集
    ——这实际上是OP问题的有效答案。谁说这不是一个有效答案?很可能是谁投了反对票,并没有说明原因:)他的问题更多的是关于实现的想法,而不是实际的实现。代码可以很容易地被转换成java。是的,如果你理解Python:我一般不会假设这一点。我同意你的观点:但是我认为Python几乎是伪代码。也许OP应该对此发表评论。