我使用的方法是:
假设图有n个顶点, 若干条边
1) 从所有边中找到 n-1 条边构成选择组合
2) 从权值和最小的组合开始验证边能否这个组合能遍历所有的顶点
如果能遍历则找到答案
因此算法的关键是:
1) 找子集合并按权值和排序, 这个问题我在这篇文章中提到
http://blog.youkuaiyun.com/span76/article/details/8755416
我的验证方法是, 统计边集合的顶点, 每个顶点的统计值不能为 0, 也不能大于2
程序我放在最后, 其操作方式是:
1) 鼠标左键选下一个组合(不验证)
2) 鼠标右键验证当前组合,如果不满足, 自动找到下一个能构成路径的组合
运行的结果
满足条件的组合

不满足条件的组合

下一个满足条件的组合

public class Main extends Component implements MouseListener {
public static void main(String[] args) {
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
JFrame f = new JFrame("A JFrame");
f.setSize(800, 800);
f.addWindowListener(l);
Main m = new Main();
f.add(m);
f.addMouseListener(m);
f.setVisible(true);
}
public Dimension getPreferredSize() {
return new Dimension(800, 800);
}
//--------------- mouse event -----------
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {

本文介绍了如何使用Java解决货郎问题。算法核心包括找到n-1条边的组合,并验证这些边是否能遍历所有顶点。通过统计边集合的顶点出现次数,确保每个顶点出现次数在0到2之间。程序允许用户通过鼠标操作进行组合选择和验证。虽然算法存在某些情况下可能不选择最短路径的问题,但能有效找到满足条件的路径组合。
最低0.47元/天 解锁文章
686

被折叠的 条评论
为什么被折叠?



