繁体   English   中英

检查图形是否完全连接-Java

[英]Check if graph is fully connected - java

我想检查图是否已完全连接-即每个节点是否都彼此连接。

我从图形文件中获取输入并将其放置在二维数组中。 完全连接的2D阵列的示例如下所示:

{{0, 1, 1, 1, 1}
 {1, 0, 1, 1, 1}
 {1, 1, 0, 1, 0}
 {1, 1, 1, 0, 1}
 {1, 1, 1, 1, 0}}

我如何编写一个布尔方法来检查它是否完全连接? 我有点想法不清,因此任何提示,建议和帮助都非常欢迎。

一种可行(但较慢)的方法是对自身进行矩阵乘法k次,其中k是节点数(在您的示例中k = 5)。 也就是说,假设您的示例中的矩阵为A,然后将A = A x A进行5次。 然后,您可以简单地检查任何一行是否-如果该行都是非零的,则该图已完全连接。 请参考此链接以获取更多信息。

首先,在2d数组中的图表示有向图,因为(5和3)与边连接,而(3和5)没有。 由于相同的原因,它没有完全连接。

Java代码检查完整连接:

public boolean checkFullConn( int[][] grid ) {
    boolean fully = true;
    for (int i = 1; i <= 5; i++)
        for (int j = 1; j <= 5; i++)
            if (i<>j)
                if (grid[i,j]==0)
                    fully = false;
    return fully;
}

为了检查简单的连接性(不完整),以下Java代码基本上检查是否所有其他节点最终都连接到node1。

public boolean checkConn( int[][] grid ) {
    boolean conn1[5];
    for (int i = 1; i <= 5; i++)
        conn1[i] = false;
    conn1[1] = true;

    for (int k = 1; k <= 5; k++)
        for (int i = 1; i <= 5; i++)
            if conn1[i]
                for (int j = 1; j <= 5; i++)
                    if (grid[i,j]==1) || grid(j,i))
                        conn1[j] = true;

    boolean conn = true;
    for (int i = 2; i <= 5; i++)
        conn = conn && conn1[i];
    return conn;
}

基本上,如果仅主对角线包含零,则有向图的矩阵表示完全连接,因为主对角线表示每个顶点与其自身的连接。
与此不同的地方表示未完全连接的图。 因此,以非常非常简单的方式:

boolean isFullyConnected(int[][]m)
    for (int i = 0; i < m.length; i++) //iterate over rows
        for (int j = 0; j < m[i].length; j++) //iterate over columns
            if(i != j && m[i][j] == 0) //if not in main diag. and not connected
                return false;
    return true;
}

如果它不是定向的(如果仅在一个方向上存在链接,则可以说一个顶点已连接到另一个顶点),只需添加反向条件&& m[j][i] == 0即可更改算法:

boolean verify(int[][]m){
    for (int i = 0; i < m.length; i++) 
        for (int j = 0; j < m[i].length; j++) 
            if(i != j && m[i][j] == 0 && m[j][i] == 0) //there's the difference
                return false;
    return true;
}

这是因为,想象一下用主对角线折叠矩阵,索引的每个重叠将代表两个顶点在两个方向上的连接,而您只需要一个即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM