java面向对象程序设计报告

  • 格式:docx
  • 大小:286.63 KB
  • 文档页数:18

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《面向对象程序设计—Java》

课程设计报告

题目图的最短路径

学院(部)信息工程学院

专业计算机科学与技术专业

班级

组长:

组员:

12 月17 日至12 月28 日共两周

指导教师

目录

1.背景 -------------------------------------------------------------------------2

2.总体设计------------------------------------------------------------------2

3. Dijkstra算法实现部分-------------------------------------------------4

4.图形用户界面--------------------------------------------------------------6

5.总结-------------------------------------------------------------------------16

6.相关代码-------------------------------------------------------------------17

1.背景

乘汽车旅行的人总希望找出到目地的尽可能短的行程。如果有一张地图并在图上标出没对十字路楼之间的距离,可是如何让找出这以最短路径?

计算机网络中的路由就是通过互联网把信息从源地址输到目的地址的活动。为了高效引导数据的传输,如何找出源和目的地址之间的最优路径?

这些问题中的网络(交通网,计算机通信网)可以适用一个带权图来建筑,寻找最有路径的需求可转化为带权图的最短径问题。最短路径问题是图论研究中的一个经典算法问题,问题具体的形式包括:

●确定起点的最短路径问题,即已知起始起点,求最短路径问题。适合

使用Dijkstra算法。

●确定终点的最短路径问题,与确定起点的问题相反,该问题是已知终

结节点,求最短路径的问题,在无向图中该问题与确定起点的问题完

全等同,在有向图中该问题等同于把所有路径方向翻转确定起点的问

题。

确定的起点终点的最短路径问题,记忆之起点和终点,求两节点之间的问题。

2.总体设计

思路:

1.Dijkstra算法实现部分。

2.图形用户界面的设计。

效果图:

3.Dijkstra算法

功能:

根据用户所给出的节点关系矩阵,利用Dijkstra算法计算出某个节点到其余所有节点的最短路径,返回路径的一个数组。

实现:

1、通过文件读入用户的矩阵。

2、将矩阵传入Dijkstra算法中,计算出最短路径并返回。

代码:

class CaclDijkstra

{

private static final int Bound=12;

private double[][] p=new double[Bound][Bound];

private final int INF = 200;

private final int Maxsize = 18;

FileReader F;

BufferedReader B;

public static double[][] dp=new double[Bound][Bound];

public CaclDijkstra(){

try{

F=new FileReader("E:\\Text.txt");

B=new BufferedReader(F);

}

catch(IOException Ie){

System.out.println("文件不存在!");

Ie.printStackTrace();

}

}

public double[][] GetP()

{

return p;

}

public void ReaderPrint(){

try{

String Read=B.readLine();

while(Read!=null){

String[] a=Read.split(" ");

p[Integer.parseInt(a[0])][Integer.parseInt(a[1])]= Double.parseDouble(a[2]);

p[Integer.parseInt(a[1])][Integer.parseInt(a[0])]=

p[Integer.parseInt(a[0])][ Integer.parseInt(a[1])];

Read=B.readLine();

}

B.close();

F.close();

for(int m=0;m

for(int n=0;n

if(p[m][n]==0.0){

p[m][n]=200.0;

}

}

}

}

catch(IOException Ie){

System.out.println("文件读取失败!");

Ie.printStackTrace();}

}

String[] dijkstra(int v) {

int i=0;

double[] dist;//结点的权

String[] s1=new String[Bound];

s1[0]="";

dist=new double[Maxsize];

String[] path;//路径

path=new String[Maxsize];

char vertex[]={'a','b','c','d','e','f','g','h','i','j','k','l'} ;