提问人:Ambitions 提问时间:12/3/2022 最后编辑:Ambitions 更新时间:12/4/2022 访问量:132
如何使用 Dijkstra 算法生成给定直径的无向、未加权图?
How to use Dijkstra's algorithm to generate an undirected, unweighted graph of a given diameter?
问:
我的工作是生成一个具有给定直径的随机无向、未加权图。我已经做的是生成一个随机距离矩阵,其中每个元素表示图形和顶点之间的距离。所以,基本上我是这样做的:d
D
Dij
i-th
j-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:
如上图所示,直径为 4,因为距离最远的顶点是 2,而 7 的距离是 4。出于这个原因,我们有.另一个例子是,因为如果我们想从 3 到 6,我们可以从 3 -> 5 -> 6,或者 3 -> 1 -> 6,反之亦然,从 6 到 3。D[2][7] = D[7][2] = 4
D[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 |
- 对角线 = 零
D1,2 = D2,1 = D2,3 = D3,2 = 1
,因为要从 1 到 2,或 2 到 3,有一个直接链接D1,3 = D3,1 = 2
,因为要从 1 到 3,最短路径是 1 -> 2 -> 3
这是与上述距离矩阵相关的图表:
我正在寻找更好的方法。
答: 暂无答案
上一个:使用空队列反转队列
评论
d
d
Dij = 3
D1,3 = 3
D
M
Mi,j = 3
vertex i
vertex j
D
Di,j = 3
vertex i
vertex j
d