[英]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。
要检查在给定邻接矩阵的情况下是否有向图,您可以查找关于主对角线的任何不对称性(即,找到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.