从文件连接点 - 最短路径

时间:2013-01-31 00:03:59

标签: java algorithm user-interface drawing line

我有一个应用程序,它读取一组点并在JPanel上绘制它们。我现在想要修改该代码,以便在每个点之间绘制一条线。这是我的代码,只是绘制点。

代码:

import javax.swing.*;
import java.awt.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class Test {

    private static final String FILE = "Desktop/Test1.txt";
    private static Point[] points;

    public static void main(final String[] args){
        try{
            final BufferedReader br = new BufferedReader(new FileReader(new File(FILE)));
            points = new Point[Integer.parseInt(br.readLine())];
            int i = 0;
            int xMax = 0;
            int yMax = 0;
            while(br.ready()){
                final String[] split = br.readLine().split("\t");
                final int x = Integer.parseInt(split[0]);
                final int y = Integer.parseInt(split[1]);
                xMax = Math.max(x, xMax);
                yMax = Math.max(y, yMax);
                points[i++] = new Point(x, y);




            }
            final JFrame frame = new JFrame("Point Data Rendering");
            final Panel panel = new Panel();
            panel.setPreferredSize(new Dimension(xMax + 10, yMax + 10));
            frame.setContentPane(panel);
            frame.pack();
            frame.setVisible(true);
            frame.repaint();
        } catch (final Exception e){
            e.printStackTrace();
        }
    }

    public static class Panel extends JPanel {

        @Override
        public void paintComponent(final Graphics g){
            g.setColor(Color.RED);
            for(final Point p : points){
                g.fillRect((int) p.getX(), (int) p.getY(), 2, 2);
            }
        }

    }

}

如果有人有任何很酷的算法找到连接所有点的最短路径,我会非常有兴趣学习它们!

1 个答案:

答案 0 :(得分:0)

找到连接所有点的最短路径被称为旅行推销员问题,被称为NP-hard。基本上这意味着没有找到SHORTEST路径的快速算法。然而,有快速算法可以找到相当短的路径,最重要的是,如果点数非常小(10或更少),那么您可以想象列举所有可能的解决方案。

一个非常简单的算法是从随机点开始,计算到每个点的距离并选择最短的路径,并重复直到您访问每个点。为了使这个更聪明,你可以沿着路径走,并尝试交换每两行(例如,如果你做a-B B-c c-D尝试a-c c-B B-D)并保留它,如果它使路径更短。

在此处阅读旅行商问题:http://en.wikipedia.org/wiki/Travelling_salesman_problem#Heuristic_and_approximation_algorithms