如何使用 Dijkstra 算法生成给定直径的无向、未加权图?

How to use Dijkstra's algorithm to generate an undirected, unweighted graph of a given diameter?

提问人:Ambitions 提问时间:12/3/2022 最后编辑:Ambitions 更新时间:12/4/2022 访问量:132

问:

我的工作是生成一个具有给定直径的随机无向、未加权图。我已经做的是生成一个随机距离矩阵,其中每个元素表示图形和顶点之间的距离。所以,基本上我是这样做的:dDDiji-thj-th

if (i == j) {
    D[i][j] = 0;
} else {
    D[i][j] = D[j][i] = random.nextInt(d + 1);
}

对角线为零,因为它总是需要零努力才能到达同一个顶点,对吗?

另外,因为它是无方向的。我的假设正确吗?Dij = Dji

我想使用 java,但我将问题标记为因为我需要算法而不是代码。language-agnostic

我的下一步是使用 Dijkstra 算法通过生成邻接矩阵来生成随机图。我认为 Dijkstra 的算法是找到最短路径,但我可以将其用于我的情况吗?

编辑#1:

Example for distance matrix

如上图所示,直径为 4,因为距离最远的顶点是 2,而 7 的距离是 4。出于这个原因,我们有.另一个例子是,因为如果我们想从 3 到 6,我们可以从 3 -> 5 -> 6,或者 3 -> 1 -> 6,反之亦然,从 6 到 3。D[2][7] = D[7][2] = 4D[3][6] = D[6][3] = 2

我正在寻找的是通过知道直径来生成随机图,直径是图中两个顶点之间的最大距离。我知道图表有很多可能性,但我需要其中任何一种。

我有一个想法,假设顶点的数量是 ,然后将每个顶点连接到下一个顶点。在这种情况下,我们将有一个线性图。d + 1

示例(直径 = 2,顶点数 = 3):

v 1 2 3
1 0 1 2
2 1 0 1
3 2 1 0
  1. 对角线 = 零
  2. D1,2 = D2,1 = D2,3 = D3,2 = 1,因为要从 1 到 2,或 2 到 3,有一个直接链接
  3. D1,3 = D3,1 = 2,因为要从 1 到 3,最短路径是 1 -> 2 -> 3

这是与上述距离矩阵相关的图表:

Graph

我正在寻找更好的方法。

算法 语言不可知图 Dijkstra

评论

0赞 kaya3 12/3/2022
我认为 Dijkstra 的算法是找到最短路径 - 是的。“但是我可以用它来处理我的案子吗?”- 如果你想找到一条最短的路径,那么是的......你也是吗?或者你想生成一个图表?除此之外,如果你的图形应该是未加权的,那么选择随机权重是没有意义的,所有边的权重应该只是 1。
0赞 Ambitions 12/3/2022
@kaya3我希望直径为 ,这意味着最远的距离是 。它是未加权的,所以正如你所说,每个链接的成本为 1。举个例子,我的意思是要从第 i 个顶点到达第 j 个顶点,那么你必须经过 2 个顶点。示例:,则路由可以是 1->5->7->3 或 1->2->4->3 或其他任何方式。路由是随机的,我想在我的代码中生成。直径是图中距离最远的两个顶点之间的最短路径。transportgeography.org/contents/methods/......ddDij = 3D1,3 = 3
0赞 Ambitions 12/3/2022
@kaya3 更清楚一点,它不是邻接矩阵,而是距离矩阵。如果是邻接矩阵,则表示 和 之间有一条直边,其权重为 3。如果是一个距离矩阵,则意味着要从到达或反之亦然,那么你需要穿过 2 个顶点和 3 条边。DMMi,j = 3vertex ivertex jDDi,j = 3vertex ivertex j
0赞 kaya3 12/3/2022
如果你用随机数填充它,你怎么能指望它是一个距离矩阵?
0赞 Ambitions 12/3/2022
@kaya3我想用随机数填充距离矩阵,然后根据该距离矩阵生成一个随机图,其中距离最远的最短路径将是长度。d

答: 暂无答案