我使用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);
我想提取备用节点的索引。对于没有分支的图,我可以使用2的步长从Graph.Nodes.Name
获取备用节点的位置。由于上图有两个分支,所以我不确定该怎么做。
所需的输出是
AlternateNodes = [1 3 5 7 9 11 12 14 16]
我想征询有关如何从分支图中获取备用节点索引的建议。
答案 0 :(得分:0)
对于给定的图形,这可以通过最短路径函数实现。首先,您可以通过以下方式识别图的头节点和尾节点:
hNodes = setdiff(tail, head);
tNodes = setdiff(head, tail);
为简单起见,我将假设您的两条路径是从节点1到节点11和16。您可以根据需要通过修改下一个代码块以遍历hNode或tNode的方式对此进行扩展。
您可以使用最短路径获取沿每个分支路径的节点列表。 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