最短路径实验报告

更新时间:2023-06-18 08:27:01 阅读: 评论:0

一、实验目的
  学习掌握图的存储结构
  利用最短路径算法,通过java编程实现最短路径输出。
二、实验环境
  Eclip平台
    三、实验过程
    最短路径算法问题是计算机科学、运筹学、地理信息系统和交通诱导、导航系统等领域研究的一个热点。传统的最短路径算法主要有Floyd算法和Dijkstra算法。Floyd
算法用于计算所有结点之间的最短路径。Dijkstra算法则用于计算一个结点到其他所有结点的最短路径。本程序利用Dijkstra算法用java语言实现最短路径的可视化。
流程: 画无向邻接矩阵  邻接矩阵初始化    求取最短路径
Java文件如下
Main.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("rial")
化学类
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.tBorder(new TitledBorder("最短路径"));
        panel2.tBackground(Color.white);
        panel2.tLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));
       
        label1 = new JLabel("起点", JLabel.LEFT);
        label1.tFont(f.tSysFontAndFace());
        panel2.add(label1);
        list1 = new JComboBox();
        list1.addItemListener(this);
        list1.tMaximumRowCount(5);// 设置 JComboBox 显示的最大行数
        panel2.add(list1);
       
        label2 = new JLabel("终点");
        label2.tFont(f.tSysFontAndFace());
        panel2.add(label2);
        list2 = new JComboBox();
        list2.addItemListener(this);
        panel2.add(list2);
        list2手机进水能修好吗.tMaximumRowCount(5);// 设置 JComboBox 显示的最大行数
       
        for (int i = 0; i < circlenum; i++) {
            list1.addItem(circlename[i]);
            list2.addItem(circlename[i]);
        }
        button = new JButton("确定");
        button.addActionListener(this);
        button.tFont(f.tSysFontAndFace());
        panel2.add(button);
        label3 = new JLabel("");
        label3.tFont(f.tSysFontAndFace());
        panel2.add(label3);
        add(panel2,BorderLayout.SOUTH);
       
        tDefaultCloOperation(JFrame.EXIT_ON_CLOSE);
        tBounds(100, 100, 530, 547);
        tVisible(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.tText("最短路径为:" + D[list2_index]);
            renum = new int[circlenum];
财务管培生            StringTokenizer fenxi = new StringTokenizer(path[list2_index], "->");
            num = 0;
            while (fenxi.hasMoreTokens()) {
                String str = Token();
                for (int i = 0; i < circlenum; i++) {
                    if (str.equals(circlename[i])) {
                        renum[num] = i;
                        num++;
                    }
                }
            }
            canvas.flag = 1;
            canvas.resultroad = renum;
            canvas.num = num;
            canvas.repaint();
        }
    }
}
SetFont.java文件
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
//系统外观处理
@SuppressWarnings("rial")
public class SetFont extends JFrame {
    public Font tSysFontAndFace() {
        try {// 根据类名称设置外观
            UIManager
                    .tLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (UnsupportedLookAndFeelException ex) {
        } catch (IllegalAccessException ex) {
        } catch (InstantiationException ex) {
        } catch (ClassNotFoundException ex) {
        }
        Font font = new Font("新宋体", Font.ITALIC + Font.BOLD, 17);
        return font;
    }
}
ShortCanvas.java文件:
//画无向邻接矩阵
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
@SuppressWarnings("rial")
运动跑步public class ShortCanvas extends Canvas {
    SetFont f;
    ShortInit init;
    String circlename[];
    int roadlength[];
    int arcs[][]; // 带权邻接矩阵
    int circlenum;
    int roadnum;
    int location[][]; // 各点坐标

本文发布于:2023-06-18 08:27:01,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/981889.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:算法   路径   实验
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图