【发布时间】:2023-03-28 22:38:02
【问题描述】:
我正在尝试获取无向加权图的最小生成树,它应该返回最小生成树的权重,如果使用名为 CITS2200 的包找不到最小生成树,则返回 -1,下面是链接到 CITS2200.jar:
我想知道是否有人能明白为什么我在以下代码中的 getMinSpanningTree 方法没有通过测试,任何帮助将不胜感激。干杯,本。 c",)
import CITS2200.*;
public class PathImp implements Path {
public int getMinSpanningTree(Graph g) {
int parent[] = new int[g.getNumberOfVertices()];
int key[] = new int [g.getNumberOfVertices()];
Boolean mstSet[] = new Boolean[g.getNumberOfVertices()];
for (int i = 0; i < g.getNumberOfVertices(); i++)
{
key[i] = Integer.MAX_VALUE;
mstSet[i] = false;
}
key[0] = 0;
parent[0] = -1;
int sum = -1;
for (int count = 0; count < g.getNumberOfVertices()-1; count++)
{
int u = minKey(key, mstSet);
mstSet[u] = true;
for (int v = 0; v < g.getNumberOfVertices(); v++){
if (g.getWeight(u,v)!=0 && mstSet[v] == false &&
g.getWeight(u,v) < key[v])
{
parent[v] = u;
key[v] = g.getWeight(u,v);
sum += g.getWeight(u,v);
}
}
}
return sum;
}
public int minKey(int key[], Boolean mstSet[])
{
int min = Integer.MAX_VALUE, min_index=-1;
for (int v = 0; v < key.length; v++)
if (mstSet[v] == false && key[v] < min)
{
min = key[v];
min_index = v;
}
return min_index;
}
public int minDistance(int dist[], Boolean sptSet[])
{
int min = Integer.MAX_VALUE, min_index=-1;
for (int v = 0; v < dist.length; v++)
if (sptSet[v] == false && dist[v] <= min)
{
min = dist[v];
min_index = v;
}
return min_index;
}
public int[] getShortestPaths(Graph g, int src)
{
int dist[] = new int[g.getNumberOfVertices()];
int graph[][] = g.getEdgeMatrix();
Boolean sptSet[] = new Boolean[g.getNumberOfVertices()];
for (int i = 0; i < g.getNumberOfVertices(); i++)
{
dist[i] = Integer.MAX_VALUE;
sptSet[i] = false;
}
dist[src] = 0;
for (int count = 0; count < g.getNumberOfVertices()-1; count++)
{
int u = minDistance(dist, sptSet);
sptSet[u] = true;
for (int v = 0; v < g.getNumberOfVertices(); v++)
if (!sptSet[v] && graph[u][v]!=0 &&
dist[u] != Integer.MAX_VALUE &&
dist[u]+graph[u][v] < dist[v])
dist[v] = dist[u] + graph[u][v];
}
return dist;
}
}
getShortestPath(G, v) 方法可以正常工作,但是,下面是我在针对测试类测试代码时收到的错误消息:
Checking files:
PathImp.java
Files exist and are readable.
Compiling Files:
PathImp
Compilation complete.
Loading Files:
PathImp
Loading complete.
Implements CITS2200.Path
Constructing instance...
Constructed PathImp
Analysing PathImp...
MST:
1
MST incorrect for 500 vertices at 0.03 density.
2
MST incorrect for 1000 vertices at 0.02 density.
3
MST incorrect for 1500 vertices at 0.01 density.
SSSP:
1
Shortest paths correct for 500 vertices at 0.03 density.
2
Shortest paths correct for 1000 vertices at 0.02 density.
3
Shortest paths correct for 1500 vertices at 0.01 density.
!Analysis halted: Your code has produced an incorrect output.
Your submission was not successful on this occasion.
Please try again when you've addressed this problem.
Execution stack trace (if any) follows.
java.lang.Exception: Your code has produced an incorrect output.
at Lab8.main(Lab8.java:86)
【问题讨论】: