我使用的方法是:
假设图有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) {