正在尝试检索第一个节点与最后一个节点之间的最短路径.问题是我的代码总是返回0.我有一种感觉,这是因为它正在计算第一个节点与第一个节点之间的距离,该距离将为零,但我不是100%.为什么我的代码总是返回0?
adj矩阵是[10] [10],所有节点都已连接,而g.network [] []是矩阵.
private static int dijkstras(Graph g) {
// Dijkstra's Algorithm
int[] best = new int[g.network.length];
boolean[] visited = new boolean[g.network.length];
int max = 10000; // Infinity equivalent.
for (int i = 0; i < g.network.length; i++)
{
best[i] = max;
visited[i] = false;
}
best[0] = 0;
for(int i = 0; i < g.network.length; i++)
{
int min = max;
int currentNode = 0;
for (int j = 0; j < g.network.length; j++)
{
if (!visited[j] && best[j] < min)
{
currentNode = j;
min = best[j];
}
}
visited[currentNode] = true;
for (int j = 0; j < g.network.length; j++)
{
if (g.network[currentNode][j] < max && best[currentNode] + g.network[currentNode][j] < best[j])
{
best[j] = best[currentNode] + g.network[currentNode][j];
}
}
}
return best[g.network.length - 2];
}
最佳答案
我认为我可以通过如下修改代码来解决问题(我现在传入一个起点,而不是硬编码为“ 0”):
private static int dijkstras(Graph g, int start) // Added a start point.
{
// Dijkstra's Algorithm
int[] best = new int[g.network.length];
boolean[] visited = new boolean[g.network.length];
int max = 10000; // Infinity equivalent.
for (int i = 0; i < g.network.length; i++)
{
best[i] = max;
visited[i] = false;
}
best[start] = start; // Changed the 0 to variable start.
for(int i = 0; i < g.network.length; i++)
{
int min = max;
int currentNode = 0;
for (int j = 0; j < g.network.length; j++)
{
if (!visited[j] && best[j] < min)
{
currentNode = j;
min = best[j];
}
}
visited[currentNode] = true;
for (int j = 0; j < g.network.length; j++)
{
if (g.network[currentNode][j] < max && best[currentNode] + g.network[currentNode][j] < best[j])
{
best[j] = best[currentNode] + g.network[currentNode][j];
}
}
}
return best[g.network.length - 2];
}
我通过for循环运行此代码,瞧……现在不只是返回零.