0

我使用 MATLAB 中的命令创建了以下图表,

tail = [1 2 3 4 5 6 6 7 8 9 10  12 13 14 15];
head = [2 3 4 5 6 7 12 8 9 10 11 13 14 15 16];
NodeLabel = string(1:16)';
EdgeLabel = strcat(string(tail),string(head));
Graph = graph(tail,head)
Graph.Nodes.Name = cellstr(NodeLabel);

我想提取备用节点的索引。Graph.Nodes.Name对于没有分支的图,我可以通过使用 2 的步长来获取备用节点的位置。由于上图有两个分支,我不知道该怎么做。

所需的输出是,

备用节点 = [1 3 5 7 9 11 12 14 16]

我想就如何从分支图中获取备用节点的索引征求建议。

4

1 回答 1

0

对于给定的图,这可以通过最短路径函数实现。首先,您可以通过以下方式识别图的头节点和尾节点:

hNodes = setdiff(tail, head);
tNodes = setdiff(head, tail);

为简单起见,我假设您的两条路径是从节点 1 到节点 11 和 16。您可以根据需要通过修改下一个代码块来循环遍历 hNodes 或 tNodes。

您可以使用 shortestpath 来获取沿每个分支路径的节点列表。setdiff 调用用于查找仅属于第二个分支的节点。然后,您可以通过获取 path1 中的所有其他节点,然后从第二个分支附加所有其他节点来获得所需的结果

path1 = shortestpath(Graph, 1, 11);
path2 = shortestpath(Graph, 1, 16);
branch2 = setdiff(path2, path1); 
AlternateNodes = [path1(1:2:end) branch2(1:2:end)]

AlternateNodes =

    1     3     5     7     9    11    12    14    16
于 2018-11-19T04:01:19.567 回答