最短路径实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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], "->");

相关文档
最新文档