**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
上个月关门了。
改进这个问题
我正在实现kruskal的算法来寻找一个图的mst,我需要为第一步排序边。但是,我需要按权重对边进行排序,而不是按索引编号。我重写了compareto(),我的weightededge实现了comparable,所以我不知道为什么它继续按索引而不是按权重排序。有什么想法吗?
private final int v;
private final int w;
private int distance;
private int price;
/**
* Create a directed edge from v to w with given weight.
*/
public WeightedDirectedEdge(int v, int w, int distance, int price) {
this.v = v;
this.w = w;
this.distance = distance;
this.price = price;
}
public int from(){
return v;
}
public int to(){
return w;
}
public int distance(){
return distance;
}
public int price(){
return price;
}
@Override
public int compareTo(WeightedDirectedEdge other)
{
Integer dist1 = new Integer(distance);
Integer dist2 = new Integer(other.distance);
return dist1.compareTo(dist2);
}
}```
1条答案
按热度按时间qgelzfjb1#
如果要按重量排序,则需要执行以下操作:
而不是使用距离:
你不需要这样做
new Integer(distance);
这样你就可以使用compareTo
只是使用Integer.compare(..);
相反。