繁体   English   中英

检查图是否是有向图?

[英]Check if Graph is a Directed Graph?

对于下面的 function,我尝试编写一个方法来测试图的矩阵表示是否是有向图。 它应该至少包含一条边,但没有对应的边。

//G- Graph
//N - Nodes
bool isDigraph(bool G[N][N]) {
for (int rows = 0; rows < N; rows++)
    for (int columns = 0; columns < N; columns++)
        if (rows != columns && G[rows][columns] == 1)
            return false; // returns false if is not a directed graph
return true; // return true if it is a directed graph
}

这里的目标是显示图形是有向的。 我想确保 function 如果图形为空且具有自循环返回 false。

  • 虽然我没有收到错误,但问题是当我的图表为空且有自循环时,它总是返回 true。
  • 有什么我应该添加到我的代码中的吗? 有没有办法表明它至少包含一条边但不包含相应的边? 如果有什么我应该添加到我的问题中以使其清楚,请告诉我。

要检查在给定邻接矩阵的情况下是否有向图,您可以查找关于主对角线的任何不对称性(即,找到i , j对,其中G[i][j] != G[j][i] )或沿着主对角线找到一些真实值,这表明某个节点的自环。

bool is_digraph(int N, bool **G) {
    for (int row = 0; row < N; row++) {
        for (int col = row; col < N; col++) {
            if (row == col && G[row][col] || G[row][col] != G[col][row]) {
                return true;
            }
        }
    }
    
    return false;
}

所以,像

    0 1 2
  +------
0 | 0 0 0
1 | 0 0 0
2 | 0 0 1

是定向的,因为我们有一个自循环。

像这样的图

    0 1 2
  +------
0 | 0 1 0
1 | 1 0 1
2 | 0 1 0

是无向的,因为我们没有自环和关于对角线的对称性。 该图如下所示:

0 
|
1---2

最后,像

    0 1 2
  +------
0 | 0 0 0
1 | 1 0 1
2 | 0 1 0

是有向的,因为我们有一个不对称:

0<----1<----2
      |     ^
      |     |
      +-----+

暂无
暂无

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

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