【发布时间】:2013-04-07 23:49:36
【问题描述】:
给定一个邻接矩阵,你如何找到两个节点之间的最短路径,同时至少遍历每个点一次并返回它需要多少次移动?
示例
给定这个数组
int[][] points = { { 0, 1 },{ 0, 2 },{ 1, 2 },{ 1, 3 },{ 3, 4 } };
我像这样制作一个相邻的矩阵......
0 1 2 3 4
0 [0] [1] [1] [0] [0]
1 [1] [0] [1] [1] [0]
2 [1] [1] [0] [0] [0]
3 [0] [1] [0] [0] [1]
4 [0] [0] [0] [1] [0]
从 0 到 4 的最短路径是 (0-2)(2-1)(1-3)(3-4),计为 4 步。
我真的不知道该怎么走。可能是最小生成树解决方案?提前致谢。
【问题讨论】:
-
遍历每个点至少一次 -> 听起来类似于Hamiltonian path,这不是一个容易有效解决的问题。
-
@trashgod,但我们需要至少访问每个顶点一次。 Johnsons 算法在 poly time 中运行,但这似乎与一些 NP Hard 问题有关(如果所有边权重均为 1,则不完全如此)。也许我错过了一些东西。
-
假设所有边的权重都是 1。@tigger
标签: java algorithm shortest-path adjacency-matrix