我假设您可以生成任何随机图。我还假设您熟悉图的邻接矩阵表示。
如果是这种情况,我会使用图的邻接矩阵表示。您将使用二维数组来表示这一点。
所以你的图表将被定义为:
#define MAXNODES 30
int graph[MAXNODES][MAXNODES];
你的图表是未加权的还是加权的?如果未加权,则矩阵的每个元素(graph[3][7]
例如 )将具有 0 或 1。如果是 0,则没有连接节点 3 和 7 的边(在此示例中),如果有一个1,那么确实有一个优势。
如果它是加权的,那么 0 仍然意味着没有边,但是一个数字(1、9、234,任何东西)表示该边的权重。
因此,您可以使用循环为每个数组元素填充一个数字 - 因此,遍历每对节点并随机分配一个权重(0 表示没有边,或者如果有边,则为某个数字,根据 weighted-vs-未加权。)
因此,要回答您的问题,检查“方向性”很容易。如果图是有向图,则 graph[3][7] 和 graph[7][3] 将具有相同的值。因此,您可以检查每一对(graph[i][j] 和 graph[j][i])以查看值是否相等。您正在查看矩阵是否对称。
如果它不是对称的(所以 [3][7] 有 0,但 [7][3] 有 1)那么在一个方向上只有一条边 - 使它有向。如果每对有两个值([3][7] = 5, [7][3] = 21),那么该图是有向的,因为权重会根据您行进的方向而变化。