最短路径实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的
学习掌握图的存储结构
利用最短路径算法,通过java编程实现最短路径输出。
二、实验环境
Eclipse平台
三、实验过程
最短路径算法问题是计算机科学、运筹学、地理信息系统和交通诱导、导航系统等领域研究的一个热点。传统的最短路径算法主要有Floyd算法和Dijkstra算法。Floyd
算法用于计算所有结点之间的最短路径。Dijkstra算法则用于计算一个结点到其他所有结点的最短路径。本程序利用Dijkstra算法用java语言实现最短路径的可视化。
流程: 画无向邻接矩阵邻接矩阵初始化求取最短路径
Java文件如下
M ain.java 文件:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.StringTokenizer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
public class Main {
public static void main(String args[]) {
new UI("最短路径");
}
}
@SuppressWarnings("serial")
class UI extends JFrame implements ActionListener, ItemListener { JFrame frame;
JButton button;
JLabel label1, label2, label3;
JComboBox list1, list2;
JPanel panel1, panel2;
ShortCanvas canvas;
ShortInit inits;
SetFont f;
String circlename[];
String circle1, circle2;
String path[];
int circlenum;
int list2_index;
int D[];
int renum[];
int num = 0;
UI(String s) {
super(s);
canvas = new ShortCanvas();
add(canvas,BorderLayout.CENTER);
f=new SetFont();
inits = new ShortInit();
circlename = inits.getcirclename();
circlenum =inits.getcirclenum();
circle1 = circlename[0];
circle2 = circlename[0];
panel2 = new JPanel();
panel2.setBorder(new TitledBorder("最短路径"));
panel2.setBackground(Color.white);
panel2.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));
label1 = new JLabel("起点", JLabel.LEFT);
label1.setFont(f.setSysFontAndFace());
panel2.add(label1);
list1 = new JComboBox();
list1.addItemListener(this);
list1.setMaximumRowCount(5);// 设置 JComboBox 显示的最大行数panel2.add(list1);
label2 = new JLabel("终点");
label2.setFont(f.setSysFontAndFace());
panel2.add(label2);
list2 = new JComboBox();
list2.addItemListener(this);
panel2.add(list2);
list2.setMaximumRowCount(5);// 设置 JComboBox 显示的最大行数
for (int i = 0; i < circlenum; i++) {
list1.addItem(circlename[i]);
list2.addItem(circlename[i]);
}
button = new JButton("确定");
button.addActionListener(this);
button.setFont(f.setSysFontAndFace());
panel2.add(button);
label3 = new JLabel("");
label3.setFont(f.setSysFontAndFace());
panel2.add(label3);
add(panel2,BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 530, 547);
setVisible(true);
validate();
}
public void itemStateChanged(ItemEvent e) {
if (e.getSource() == list1)
circle1 = (String) list1.getSelectedItem();
if (e.getSource() == list2) {
circle2 = (String) list2.getSelectedItem();
list2_index = list2.getSelectedIndex();
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button) {
ShortPath sp = new ShortPath(circle1, circle2);
path = sp.getpath();
D = sp.getD();
label3.setText("最短路径为:" + D[list2_index]);
renum = new int[circlenum];
StringTokenizer fenxi = new
StringTokenizer(path[list2_index], "->");