实验报告:基于最短路径分析与应用

合集下载

最短路径的实验报告

最短路径的实验报告

最短路径的实验报告最短路径的实验报告引言:最短路径问题是图论中一个经典的问题,涉及到在一个带有权重的图中找到两个顶点之间的最短路径。

本实验旨在通过实际操作和算法分析,深入探讨最短路径算法的性能和应用。

实验设计:本次实验使用了Dijkstra算法和Floyd-Warshall算法来解决最短路径问题。

首先,我们使用Python编程语言实现了这两个算法,并对它们进行了性能测试。

然后,我们选择了几个不同规模的图进行实验,以比较这两种算法的时间复杂度和空间复杂度。

最后,我们还在实际应用中使用了最短路径算法,以验证其实用性。

实验过程:1. 实现Dijkstra算法Dijkstra算法是一种贪心算法,用于求解单源最短路径问题。

我们首先实现了该算法,并对其进行了性能测试。

在测试中,我们使用了一个包含1000个顶点和5000条边的图,记录了算法的运行时间。

结果显示,Dijkstra算法的时间复杂度为O(V^2),其中V表示图中的顶点数。

2. 实现Floyd-Warshall算法Floyd-Warshall算法是一种动态规划算法,用于求解所有顶点对之间的最短路径。

我们在Python中实现了该算法,并对其进行了性能测试。

在测试中,我们使用了一个包含100个顶点和5000条边的图,记录了算法的运行时间。

结果显示,Floyd-Warshall算法的时间复杂度为O(V^3),其中V表示图中的顶点数。

3. 比较两种算法通过对Dijkstra算法和Floyd-Warshall算法的性能测试,我们可以看到,Dijkstra算法在处理较大规模的图时性能更好,而Floyd-Warshall算法在处理较小规模的图时性能更好。

因此,在实际应用中,我们可以根据图的规模选择合适的算法。

4. 应用实例为了验证最短路径算法的实际应用性,我们选择了一个城市交通网络图进行实验。

我们使用了Dijkstra算法来计算两个城市之间的最短路径,并将结果与实际的驾车时间进行比较。

最短路径规划实验报告

最短路径规划实验报告

1.实验题目:单源最短路径的dijkstra解法两点间最短路径的动态规划解法Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。

主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。

注意该算法要求图中不存在负权边。

问题描述:在无向图G=(V,E) 中,假设每条边E[i] 的长度为w[i],找到由顶点V0 到其余各点的最短路径。

(单源最短路径)2.算法描述:1)算法思想:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径, 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。

在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v 到U中任何顶点的最短路径长度。

此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。

2)算法步骤:a.初始时,S只包含源点,即S={v},v的距离为0。

U包含除v外的其他顶点,即:U={其余顶点},若v与U中顶点u有边,则<u,v>正常有权值,若u不是v的出边邻接点,则<u,v>权值为∞。

b.从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。

c.以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。

d.重复步骤b和c直到所有顶点都包含在S中。

算法课设实验报告(3篇)

算法课设实验报告(3篇)

第1篇一、实验背景与目的随着计算机技术的飞速发展,算法在计算机科学中扮演着至关重要的角色。

为了加深对算法设计与分析的理解,提高实际应用能力,本实验课程设计旨在通过实际操作,让学生掌握算法设计与分析的基本方法,学会运用所学知识解决实际问题。

二、实验内容与步骤本次实验共分为三个部分,分别为排序算法、贪心算法和动态规划算法的设计与实现。

1. 排序算法(1)实验目的:熟悉常见的排序算法,理解其原理,比较其优缺点,并实现至少三种排序算法。

(2)实验内容:- 实现冒泡排序、快速排序和归并排序三种算法。

- 对每种算法进行时间复杂度和空间复杂度的分析。

- 编写测试程序,对算法进行性能测试,比较不同算法的优劣。

(3)实验步骤:- 分析冒泡排序、快速排序和归并排序的原理。

- 编写三种排序算法的代码。

- 分析代码的时间复杂度和空间复杂度。

- 编写测试程序,生成随机测试数据,测试三种算法的性能。

- 比较三种算法的运行时间和内存占用。

2. 贪心算法(1)实验目的:理解贪心算法的基本思想,掌握贪心算法的解题步骤,并实现一个贪心算法问题。

(2)实验内容:- 实现一个贪心算法问题,如活动选择问题。

- 分析贪心算法的正确性,并证明其最优性。

(3)实验步骤:- 分析活动选择问题的贪心策略。

- 编写贪心算法的代码。

- 分析贪心算法的正确性,并证明其最优性。

- 编写测试程序,验证贪心算法的正确性。

3. 动态规划算法(1)实验目的:理解动态规划算法的基本思想,掌握动态规划算法的解题步骤,并实现一个动态规划算法问题。

(2)实验内容:- 实现一个动态规划算法问题,如背包问题。

- 分析动态规划算法的正确性,并证明其最优性。

(3)实验步骤:- 分析背包问题的动态规划策略。

- 编写动态规划算法的代码。

- 分析动态规划算法的正确性,并证明其最优性。

- 编写测试程序,验证动态规划算法的正确性。

三、实验结果与分析1. 排序算法实验结果:- 冒泡排序:时间复杂度O(n^2),空间复杂度O(1)。

实验三最短路径的算法(离散数学实验报告)

实验三最短路径的算法(离散数学实验报告)

实验三最短路径的算法(离散数学实验报告)实验3:最短路径算法⼀、实验⽬的通过本实验的学习,理解Floyd(弗洛伊得)最短路径算法的思想⼆、实验内容⽤C语⾔编程实现求赋权图中任意两点间最短路径的Floyd算法,并能对给定的两结点⾃动求出最短路径三、实验原理、⽅法和⼿段1、Floyd算法的原理定义:Dk[i,j] 表⽰赋权图中从结点vi出发仅通过v0,v1,┉,vk-1中的某些结点到达vj的最短路径的长度,若从vi到vj没有仅通过v0,v1,┉,vk-1 的路径,则D[i,j]=∝即D-1[i,j] 表⽰赋权图中从结点vi到vj的边的长度,若没有从结点vi到vj的边,则D[i,j]=∝D0[i,j] 表⽰赋权图中从结点vi到vj的”最短”路径的长度, 这条路上除了可能有v0外没有其它结点D1[i,j] 表⽰赋权图中从结点vi到vj的”最短”路径的长度, 这条路上除了可能有v0,v1外没有其它结点┉┉┉根据此定义,D k[i,j]=min{ D k-1[i,j] , D k-1[i,k-1]+D k-1[k-1,j] }定义:path[i,j]表⽰从结点vi到vj的“最短”路径上vi的后继结点四、实验要求要求输出每对结点之间的最短路径长度以及其最短路径五、实验步骤(⼀)算法描述Step 1 初始化有向图的成本邻矩阵D、路径矩阵path若从结点vi到vj有边,则D[i,j]= vi到vj的边的长度,path[i,j]= i;否则D[i,j]=∝,path[i,j]=-1Step 2 刷新D、path 对k=1,2,┉n 重复Step 3和Step 4Step 3 刷新⾏对i=1,2,┉n 重复Step 4Step 4 刷新Mij 对j=1,2,┉n若D k-1[i,k]+D k-1[k,j][结束循环][结束Step 3循环][结束Step 2循环]Step 5 退出(⼆)程序框图参考主程序框图其中,打印最短路径中间结点调⽤递归函数dist(),其框图如下,其中fist,end是当前有向边的起点和终点dist(int first, int end)七、测试⽤例:1、输⼊成本邻接矩阵:D :06380532290141003210∝∝∝∝V V V V V V V V (其中∝可⽤某个⾜够⼤的数据值代替,⽐如100)可得最短路径矩阵:P :131132122211111010103210--------V V V V V V V V以及各顶点之间的最短路径和最短路径长度:从V0到V1的最短路径长度为:1 ;最短路径为:V0→V1 从V0到V2的最短路径长度为:9 ;最短路径为:V0→V1→V3→V2 从V0到V3的最短路径长度为:3 ;最短路径为:V0→V1→V3 从V1到V0的最短路径长度为:11;最短路径为:V1→V3→V2→V0从V1到V2的最短路径长度为:8 ;最短路径为:V1→V3→V2 从V1到V3的最短路径长度为:2 ;最短路径为:V1→V3 从V2到V0的最短路径长度为:3 ;最短路径为:V2→V0 从V2到V1的最短路径长度为:4 ;最短路径为:V2→V0→V1 从V2到V3的最短路径长度为:6 ;最短路径为:V2→V0→V1→V3 从V3到V0的最短路径长度为:9 ;最短路径为:V3→V2→V0 从V3到V1的最短路径长度为:10;最短路径为:V3→V2→V0→V1 从V3到V2的最短路径长度为:6 ;最短路径为:V3→V2 参考程序: #include #define INFINITY 100 #define Max 10int a[Max][Max],P[Max][Max]; main() {void Print_Flod(int d);int i,j,k,D=4;printf("请输⼊成本邻接矩阵:\n");for(i=0;ifor(j=0;j{scanf("%d",&a[i][j]);}for(i=0;ifor(j=0;j{if(a[i][j]>0&& a[i][j]elseP[i][j]=-1;}for(k=0;kfor(i=0;ifor(j=0;jif (a[i][k]+a[k][j]{a[i][j]=a[i][k]+a[k][j];P[i][j]=k;}Print_Flod(D);}void Print_Flod(int d){void dist(int first,int end);int i,j;for(i=0;ifor(j=0;jif(i!=j){ printf("from V%d to V%d: ",i,j); dist(i,j);printf("V%d",j);printf(" (The length is: %d)\n",a[i][j]); }}void dist(int first,int end){ int x;x=P[first][end];if(x!=first){ dist(first,x); dist(x,end); }else printf("V%d->",x);}输出结果:。

最短路径实验报告

最短路径实验报告

最短路径实验报告最短路径实验报告引言:最短路径算法是计算机科学中的一个经典问题,它在许多领域中都有广泛的应用,如交通规划、电路设计、网络通信等。

本实验旨在通过实践探索最短路径算法的实际应用,并对其性能进行评估。

一、问题描述:我们将研究一个城市的交通网络,其中包含多个节点和连接这些节点的道路。

每条道路都有一个权重,表示通过该道路所需的时间或距离。

我们的目标是找到两个节点之间的最短路径,即使得路径上各个道路权重之和最小的路径。

二、算法选择:为了解决这个问题,我们选择了Dijkstra算法和Floyd-Warshall算法作为比较对象。

Dijkstra算法是一种单源最短路径算法,它通过不断选择当前最短路径的节点来逐步扩展最短路径树。

Floyd-Warshall算法则是一种多源最短路径算法,它通过动态规划的方式计算任意两个节点之间的最短路径。

三、实验设计:我们首先构建了一个包含10个节点和15条道路的交通网络,每条道路的权重随机生成。

然后,我们分别使用Dijkstra算法和Floyd-Warshall算法计算两个节点之间的最短路径,并记录计算时间。

四、实验结果:经过实验,我们发现Dijkstra算法在计算单源最短路径时表现出色,但是在计算多源最短路径时效率较低。

而Floyd-Warshall算法在计算多源最短路径时表现出色,但是对于大型网络的单源最短路径计算则需要较长的时间。

五、性能评估:为了评估算法的性能,我们对不同规模的交通网络进行了测试,并记录了算法的计算时间。

实验结果显示,随着交通网络规模的增大,Dijkstra算法的计算时间呈指数级增长,而Floyd-Warshall算法的计算时间则呈多项式级增长。

因此,在处理大型网络时,Floyd-Warshall算法具有一定的优势。

六、实际应用:最短路径算法在实际应用中有着广泛的用途。

例如,在交通规划中,最短路径算法可以帮助我们找到最优的行车路线,减少交通拥堵。

数学建模实验报告 第十一章 最短路问题

数学建模实验报告 第十一章 最短路问题

一、实验内容与要求掌握Dijkstra算法和Floyd算法,并运用这两种算法求一些最短路径的问题。

二、实验软件三、实验内容1、在一个城市交通系统中取出一段如图所示,其入口为顶点v1,出口为顶点v8,每条弧段旁的数字表示通过该路段所需时间,每次转弯需要附加时间为3,求v1到 v8的最短时间路径。

3V4 2 V74 V8程序:function y=bijiaodaxiao(f1,f2,f3,f4)v12=1;v23=3;v24=2;v35=1;v47=2;v57=2;v56=6;v68=3;v78=4;turn= 3;f1=v12+v23+v35+v56+turn+v68;f2=v12+v23+v35+turn+v57+turn+v78;f3=v12+turn+v24+turn+v47+v78;f4=v12+turn+v24+v47+turn+v57+turn+v56+turn+v68; min=f1;if f2<minmin=f2;endif f3<minmin=f3;endif f4<minmin=f4;endminf1f2f3f4实验结果:v1到v8的最短时间路径为15,路径为1-2-4-7-8.2、求如图所示中每一结点到其他结点的最短路。

64V25 V410 V76 V8中的程序:function[D,R]=floyd(a)n=size(a,1);D=afor i=1:nfor j=1:nR(i,j)=j;endendRfor k=1:nfor i=1:nfor j=1:nif D(i,k)+D(k,j)<D(i,j)D(i,j)=D(i,k)+D(k,j);R(i,j)=R(i,k);endendendkDRend程序:>> a=[0 3 10 inf inf inf inf inf;3 0 inf 5 inf inf inf inf;10 inf 0 6 inf inf inf inf;inf 5 6 0 4 inf 10 inf ;inf inf inf 4 0 9 5 inf ;inf inf inf inf 9 0 3 4;inf inf inf 10 5 3 0 6;inf inf inf inf inf 4 6 0;];[D,R]=floyd(a)实验结果:D =0 3 10 Inf Inf Inf Inf Inf 3 0 Inf 5 Inf Inf Inf Inf 10 Inf 0 6 Inf Inf Inf Inf Inf 5 6 0 4 Inf 10 Inf Inf Inf Inf 4 0 9 5 Inf Inf Inf Inf Inf 9 0 3 4 Inf Inf Inf 10 5 3 0 6 Inf Inf Inf Inf Inf 4 6 0R =1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 81 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8k =1D =0 3 10 Inf Inf Inf Inf Inf 3 0 13 5 Inf Inf Inf Inf 10 13 0 6 Inf Inf Inf Inf Inf 5 6 0 4 Inf 10 Inf Inf Inf Inf 4 0 9 5 Inf Inf Inf Inf Inf 9 0 3 4 Inf Inf Inf 10 5 3 0 6 Inf Inf Inf Inf Inf 4 6 0R =1 2 3 4 5 6 7 8 1 2 1 4 5 6 7 8 1 1 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8k =2D =0 3 10 8 Inf Inf Inf Inf 3 0 13 5 Inf Inf Inf Inf 10 13 0 6 Inf Inf Inf Inf 8 5 6 0 4 Inf 10 InfInf Inf Inf 4 0 9 5 Inf Inf Inf Inf Inf 9 0 3 4 Inf Inf Inf 10 5 3 0 6 Inf Inf Inf Inf Inf 4 6 0R =1 2 3 2 5 6 7 8 1 2 1 4 5 6 7 81 1 3 4 5 6 7 82 2345678 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8k =3D =0 3 10 8 Inf Inf Inf Inf 3 0 13 5 Inf Inf Inf Inf 10 13 0 6 Inf Inf Inf Inf 8 5 6 0 4 Inf 10 Inf Inf Inf Inf 4 0 9 5 Inf Inf Inf Inf Inf 9 0 3 4 Inf Inf Inf 10 5 3 0 6 Inf Inf Inf Inf Inf 4 6 0R =1 2 3 2 5 6 7 8 1 2 1 4 5 6 7 81 1 3 4 5 6 7 82 2345678 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 81 2 3 4 5 6 7 8k =4D =0 3 10 8 12 Inf 18 Inf 3 0 11 5 9 Inf 15 Inf 10 11 0 6 10 Inf 16 Inf 8 5 6 0 4 Inf 10 Inf 12 9 10 4 0 9 5 Inf Inf Inf Inf Inf 9 0 3 4 18 15 16 10 5 3 0 6 Inf Inf Inf Inf Inf 4 6 0R =1 2 3 2 2 6 2 8 1 2 4 4 4 6 4 81 4 3 4 4 6 4 82 2345678 4 4 4 4 5 6 7 8 1 2 3 4 5 6 7 8 4 4 4 4 5 6 7 8 1 2 3 4 5 6 7 8k =5D =0 3 10 8 12 21 17 Inf 3 0 11 5 9 18 14 Inf 10 11 0 6 10 19 15 Inf 8 5 6 0 4 13 9 Inf 12 9 10 4 0 9 5 Inf21 18 19 13 9 0 3 4 17 14 15 9 5 3 0 6 Inf Inf Inf Inf Inf 4 6 0R =1 2 3 2 2 2 2 8 1 2 4 4 4 4 4 81 4 3 4 4 4 4 82 2345 5 5 84 4 4 4567 85 5 5 5 5678 5 5 5 5 5 6 7 8 1 2 3 4 5 6 7 8k =6D =0 3 10 8 12 21 17 25 3 0 11 5 9 18 14 22 10 11 0 6 10 19 15 23 8 5 6 0 4 13 9 17 12 9 10 4 0 9 5 13 21 18 19 13 9 0 3 4 17 14 15 9 5 3 0 6 25 22 23 17 13 4 6 0R =1 2 3 2 2 2 2 2 1 2 4 4 4 4 4 41 4 3 4 4 4 4 42 2345 5 5 54 4 4 4567 65 5 5 5 567 85 5 5 5 567 86 6 6 6 6 67 8k =7D =0 3 10 8 12 20 17 23 3 0 11 5 9 17 14 20 10 11 0 6 10 18 15 21 8 5 6 0 4 12 9 15 12 9 10 4 0 8 5 11 20 17 18 12 8 0 3 4 17 14 15 9 5 3 0 6 23 20 21 15 11 4 6 0R =1 2 3 2 2 2 2 21 2 4 4 4 4 4 41 4 3 4 4 4 4 42 2345 5 5 5 4 4 4 4 5 7 7 7 7 7 7 7 7678 5 5 5 5 5 6 7 8 7 7 7 7 7 6 7 8k =8D =0 3 10 8 12 20 17 23 3 0 11 5 9 17 14 20 10 11 0 6 10 18 15 21 8 5 6 0 4 12 9 15 12 9 10 4 0 8 5 11 20 17 18 12 8 0 3 423 20 21 15 11 4 6 0R =1 2 3 2 2 2 2 2 1 2 4 4 4 4 4 41 4 3 4 4 4 4 42 2345 5 5 5 4 4 4 4 5 7 7 7 7 7 7 7 7678 5 5 5 5 5 6 7 8 7 7 7 7 7 6 7 8D =0 3 10 8 12 20 17 23 3 0 11 5 9 17 14 20 10 11 0 6 10 18 15 21 8 5 6 0 4 12 9 1520 17 18 12 8 0 3 4 17 14 15 9 5 3 0 6 23 20 21 15 11 4 6 0R =1 2 3 2 2 2 2 2 1 2 4 4 4 4 4 41 4 3 4 4 4 4 42 2345 5 5 5 4 4 4 4 5 7 7 7 7 7 7 7 7678 5 5 5 5 5 6 7 8 7 7 7 7 7 6 7 8四、实验体会。

matlab最短路径实验报告

matlab最短路径实验报告

最短路径实验报告1. 背景最短路径问题是图论中的一个经典问题,它在很多实际应用中都具有重要的意义。

解决最短路径问题可以帮助我们找到两个节点之间最短的路径,这在交通规划、网络通信等领域都有广泛应用。

在本次实验中,我们将使用Matlab编程语言来解决最短路径问题。

Matlab是一种高级技术计算语言和环境,它提供了丰富的工具箱和函数库,可以方便地进行数值计算、数据可视化等操作。

通过使用Matlab,我们可以快速有效地解决最短路径问题,并得到结果。

2. 分析本次实验的目标是使用Matlab解决最短路径问题。

为了达到这个目标,我们需要进行以下步骤:2.1 数据准备首先,我们需要准备一些数据来表示图的结构。

这些数据包括节点和边的信息。

节点可以用数字或字符串来表示,边可以用两个节点之间的关系来表示。

2.2 图的表示在Matlab中,我们可以使用邻接矩阵或邻接表来表示图的结构。

邻接矩阵是一个二维数组,其中元素表示两个节点之间是否存在边。

邻接表是一个列表,其中每个节点都有一个相邻节点列表。

2.3 最短路径算法解决最短路径问题的常用算法有迪杰斯特拉算法和弗洛伊德算法。

迪杰斯特拉算法是一种贪心算法,通过不断选择当前最短路径的节点来求解最短路径。

弗洛伊德算法是一种动态规划算法,通过逐步更新节点之间的最短距离来求解最短路径。

2.4 编程实现在Matlab中,我们可以使用内置函数或编写自定义函数来实现最短路径算法。

内置函数如graphshortestpath和shortestpath可以直接调用,而自定义函数需要我们根据具体问题进行编写。

3. 结果经过实验,我们成功地使用Matlab解决了最短路径问题,并得到了正确的结果。

下面是我们得到的一些结果示例:输入:节点:A, B, C, D边:(A,B), (B,C), (C,D)输出:最短路径:A -> B -> C -> D距离:3输入:节点:A, B, C, D边:(A,B), (B,C), (C,D)输出:最短路径:A -> C -> D距离:2通过这些结果,我们可以看出Matlab的最短路径算法在解决最短路径问题上具有较高的准确性和效率。

单源最短路径(贪心法)实验报告

单源最短路径(贪心法)实验报告

算法分析与设计实验报告第 5 次实验使用贪心法求出给定图各点的最短路径,并计算算法的执行时间,分析算法的有效性。

已知一个有向网络 G=(V,E)和源点 V1,如上所示,求出从源点出发到图中其余顶点的最短路径。

1 用邻接矩阵表示有向图,并进行初始化,同时选择源点;}手动输入实现实验所给图形:随机数产生图的权值:通过这次实验,我回顾了回溯法求解最短路径问题,在其中加入了舍伍德附录:完整代码#include<stdio.h>#include<stdlib.h>#include<time.h>#define maxint 1000int c[200][200]={0};void Dijkstra(int n,int v,int dist[],int prev[]){ bool s[maxint];for(int i=1;i<=n;i++){dist[i]=c[v][i];s[i]=false;if(dist[i]==maxint) prev[i]=0;else prev[i]=v;} //找到第一个可行源点 s[]标志,记录prev[]前一个点dist[v]=0;s[v]=true;for(int i=1;i<n;i++){int temp=maxint;int u=v;for(int j=1;j<=n;j++){if((!s[j])&&(dist[j]<temp)){u=j;temp=dist[j];}}s[u]=true;for(int j=1;j<=n;j++){int newdist=dist[u]+c[u][j];if(newdist<dist[j]){dist[j]=newdist;prev[j]=u;}}}}int main(){int n,v;printf("请输入顶点数: ");scanf("%d",&n);//printf("路径: ");srand(time(0));for(int i=1;i<n+1;i++){for(int j=1;j<n+1;j++){/* scanf("%d",&c[i][j]);*/ ///手动输入if(i!=j){if((c[j][i]==0)||(c[j][i]==1000))c[i][j]=rand()%100+1;else c[i][j]=1000;if(c[i][j]>50) c[i][j]=1000;}}}printf("请输入源点: ");scanf("%d",&v);int dist[n+1],prev[n+1];printf("\n路径:\n");for(int i=1;i<n+1;i++){for(int j=1;j<n+1;j++)printf("%5d ",c[i][j]);printf("\n");}Dijkstra(n,v,dist,prev);for(int i=1;i<n+1;i++){printf("\n%d到%d的最短路径为:%d",v,i,dist[i]);}}。

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

资源与环境科学学院实验报告
姓名:康强杰专业:地理信息系统年级:09级
学号:2009160217 评分日期:2012/4/6
上机实习名称:最短路径问题分析与应用
实习目的:
学会用ArcGIS9 进行各种类型的最短路径分析,了解内在的运算机理. 同时,研究交通网络中要素的设置如:权重的改变和阻强的设置对最短路径的选择也有着很大的影响,对于现实也有一定的指导意义。

实习原理:
任何一种网络分析功能或方法,都是在给定的条件和要求下,利用网络流向来寻求路线或服务区,该实验是基于ARCGIS中网络分析中几何网络的特征和属性,利用距离、权重和规划条件进行分析,得到结果并应用在实际中。

主要类型包括:
1、路径分析
最佳路径分析
N条最佳路径分析
最短路径
2、地址匹配
3、资源分配
实习步骤:
1.首先打开ArcMap选择E:\Chp7\Ex2\city.mdb,并加载整个数据集city,然后将place点状要
素以HOME 字段属性值进行符号化,1 值是家,0 值是超市。

2.然后分别进行:
(1)无权重最佳路径生成
1.1在设施网络分析工具条上,点选旗标和障碍工具板下拉箭头,将旗标放
在家和想去的超市点上。

1.2确认在Analysis下拉菜单中的Options按钮打开的Analysis Options对话框
中的weight和weight filt自身的长短来确定的。

1.3点选追踪工作(Track task)下拉菜单选择寻找路径(find path)。

单击solve
键,则最短路径将显示出来,总成本将显示在状态列。

(2)加权最佳路径生成
2.1在设施网络分析工具条上,点选旗标和障碍工具板下拉箭头,将旗标放在家
和想去的某个超市点上。

2.2 选择Analysis下拉菜单,选择Option按钮,打开Analysis Option对话框,选
择Weight标签页,在边的权重(edge weight)上,全部选择长度(length)权重属性。

2.3 点选追踪工作(Track task)下拉菜单选择寻找路径(find path)。

单击solve
键,则以长度为比重为基础的最短路径将显示出来,这条路径的总成本将显示在
状态列。

2.4 上述是通过距离的远近选择而得到的最佳路径,而不同类型的道路由于道路车
流量的问题,有时候要选择时间较短的路径,同样可以利用网络分析进行获得最佳
路径。

(3)按顺序逐个访问路径生成
3.1 在设施网络分析工具条上,点选旗标和障碍工具板下拉箭头,将旗标按照车
辆访问的顺序逐个放在点上。

3.2 选择Analysis下拉菜单,选择Option按钮,打开Analysis Option对话框,选择
Weight标签页,在边的权重(edge weight)上,全部选择长度(length)权重属性。

3.3 点选追踪工作(Track task)下拉菜单选择寻找路径(find path)。

单击solve
键,则从起点按顺序逐一经过超市然后最后回到家的最短有效路径将显示出来,这
条路径的总成本将显示在状态列。

3.4 同样是经过这11个地点,换成权重是时间的,由于道路车流量的不同,如在市
中心车流量特别大,车速慢,故而为节约时间,所以使得路经发生很大的改变,而
从外围的道路行驶了。

( 4 )阻强问题
4.1 修路的情形出现,即某个路段不可运行,这在网络中的表现是设置阻强,方法
有两种,一种是永久性的,直接将网络边要素的属性修改成不可运行。

操作是选择要
进行设置的边要素,将其属性中的Enabled字段改成False即可;另一种是暂时性的,
设置边要素障碍。

即利用边要素障碍添加工具将边设置。

取同上述距离加权相同的超
市为地点,假设其中一条路段正在修路,则产生的新的最佳路径如图18(图中标注“╳”
即为阻强设置边)。

可以看出路段的维修状况使得最佳路径产生了改变,同时最近距
离也随之发生改变。

4.2 十字路口发生问题,即网络中的结点不可运行,这时在网络中的表现也是设置阻
强,方法和线状要素的一样,改变结点属性或利用点要素阻强添加工具将点设置,取
同上述距离加权相同的超市为地点,假设其中某个路口出现阻塞,利用该方法产生的
最佳路径。

实习结果:(文字描述、绘图)
(1)下图是:无权重最佳路径生成图
(2)下图是:有权重最佳路径生成2.1 距离加权最佳路径图
2.2时间加权最佳路径图
(3)按顺序逐个访问路径生成
3.1逐个目的地的路径的获得图
3.2 时间权重的路径的获得图
(4)阻强问题
4.1 有边阻强的距离最佳路径图
4.2有点阻强的距离最佳路径图
总结:结论、问题并加以讨论
1、自主学习:通过自主学习网络分析的相关理论知识
2、孰能生巧:跟着书上的操作步骤,我们完成了书上四个实验的操作。

开始并不熟练,但是,通过录制视频之后,我们能够熟练些操纵。

3、兴趣是最好的老师:当看到我们的实验结果之后,大大的提高了我们对这个知识点的兴趣,我们上网查阅网络分析在现实中的相关应用。

所谓,兴趣是最好的老师,我们觉得这种学习效率比听课的效率高多了。

4、局限性:拓展的局限性,由于时间的限制,我们没有其他的拓展只是书上的这些操作。

以后,我们会进一步运用这个功能。

补充:最短路径分析可以应用于旅游决策支持系统,根据游客预计的旅游线路、经费、兴趣和爱好、旅游总时间、和消费标准等因素,按照旅游决策的最大的效益原则,花最小的资金和时间,获得尽量多的旅游体验。

相关文档
最新文档