【问题标题】:Finding all possible paths between all vertices of a graph查找图的所有顶点之间的所有可能路径
【发布时间】:2015-06-03 13:58:16
【问题描述】:
我有一个有 13 个顶点的有向图,并且想要检查所有可能的所有长度的简单路径 (max=12)。我尝试了 FindPath[Graph,Vertex1,Vertex2,12,All] 公式,但由于我不知道如何以更快更简单的方式提取路径,因此不得不输入此函数 13*12 次。有没有办法只用一个公式而不是 156 个公式来提取所有路径(从每个顶点到每个其他顶点)?
我还可以访问邻接矩阵,这可能暗示了另一种可能的方式,但我不知道如何从邻接矩阵中提取路径。
我知道有很多关于如何找到两个顶点之间所有可能路径的问题,但我需要更大的图像。
【问题讨论】:
标签:
path
wolfram-mathematica
【解决方案1】:
主要是您不知道将函数映射到二维数组或三角形上的原语。在 Mathematica 文档中查找 Map、Outer、Table、Scan、MapThread 等。
一种方法是(适应您的情况):
Flatten[ Table[ Table[
FindPath[ mygraph, vertexlist[[i]], vertexlist[[j]], 12, All ],
{j,i+1, Length[vertexlist] }], {i, 1, Length[vertexlist]-1 }], 1]
假设您将顶点的标识放入顶点列表中。如果这些只是从 1 到 13 的整数,则可以将 i 替换为 vertexlist[[i]] 等。
您将获得 n*(n-1)/2 两个不同顶点之间的路径列表,按起始顶点排序。如果您的图形是有方向的,您可能需要整个 n*(n-1) 。对上面的代码进行简单修改即可。