1、数据结构课程设计大作业 数据结构课程设计大作业130821班 题 目 最短路径问题 专 业 计算机科学与技术 学生姓名 学 号 130821XX 指导教师 唐国民 完成日期 2014.11.25 湖州师院信息工程学院 最短路径问题【内容摘要】【关键字】 最短路径 图论 Floyd算法【Abstract】【Key words】Shortest path,Graph theory,Floyd algorithm实验内容概述 这是一幅美国硅谷的简单地图。对于此图,请写出一个完整的程序,对于输入的起点和终点,输出它们之间的最短路径。实验目的概述在实际生活中诸如在运输路线、出外旅游路线、厂址选择等诸多方
2、面都会有最短距离的应用。本实验中的问题是求任意两点间最短距离的问题,而实验的目的是运用邻接矩阵解决图存储并解决在此结构情况下对矩阵中元素的扫描计算。其关键是怎样储存和计算。储存用的是邻接矩阵,而计算用的是弗洛伊德算法。通过该实验更好地体会并进一步认识邻接矩阵,知道弗洛伊德算法在解决任意两点之间最短距离问题方面上的优势。解题思路的描述本题是求美国硅谷中任意两点之间的最短距离,由于题意是求任意两点之间的最短路径首先考虑到弗洛伊德算法,并且需要使用邻接矩阵来解决存储问题。源程序清单#include#include #includeusing namespace std;#define N 99999
3、#define MAXVEX 20struct node int num; string name;numbers17;void Floyed(int costMAXVEX,int n,int m,int x) int AMAXVEXMAXVEX,pathMAXVEXMAXVEX; int i,j,k,pre; for(i=0;in;i+) for(j=0;jn;j+) Aij=costij; pathij=-1; for(k=0;kn;k+) for(i=0;in;i+) for(j=0;j(Aik+Akj) Aij=Aik+Akj; pathij=k; if(m!=x) cout numb
4、ersm.name numbersx.name ; if(Amx=N) if(m!=x) cout 该路径不存在n endl; else cout 最短路径长度是: Amx 米n; cout 具体路径为: numbersm.name -; pre=pathmx; while(pre!=-1) coutnumberspre.name -; pre=pathprex; coutnumbersx.nameendl; int main(void) int i,k,l,x; cout 美国硅谷地图最短路线查询表 endl; cout -序号 - 地点名称 - endl; cout 0 San Raphe
5、al endl; cout 1 Cross endl; cout 2 Daly Cit endl; cout 3 San Francisco endl; cout 4 Oakland endl; cout 5 San Larenzo endl; cout 6 Cross B endl; cout 7 San Maleo endl; cout 8 Hayward endl; cout 9 Dubin endl; cout 10 Redwood City endl; cout 11 Cross C endl; cout 12 Palo Also endl; cout 13 Freemood end
6、l; cout 14 Min View endl; cout 15 Cupertin endl; cout 16 San Jose endl; coutendl; numbers0.num=0;numbers0.name=San Rapheal; numbers1.num=1;numbers1.name=Cross; numbers2.num=2;numbers2.name=Daly Cit; numbers3.num=3;numbers3.name=San Francisco; numbers4.num=4;numbers4.name=Oakland; numbers5.num=5;numb
7、ers5.name=San Larenzo; numbers6.num=6;numbers6.name=Cross B; numbers7.num=7;numbers7.name=San Maleo; numbers8.num=8;numbers8.name=Hayward; numbers9.num=9;numbers9.name=Dubin; numbers10.num=10;numbers10.name=Redwood City; numbers11.num=11;numbers11.name=Cross C; numbers12.num=12;numbers12.name=Palo A
8、lso; numbers13.num=13;numbers13.name=Freemood; numbers14.num=14;numbers14.name=Min View; numbers15.num=15;numbers15.name=Cupertin; numbers16.num=16;numbers16.name=San Jose; cout k; cout k t numbersk.name endl; cout x; cout x t numbersx.name endl; cout 以下是从 numbersk.name 出发到 numbersx.name 的最短路径: endl
9、 ; int cost17MAXVEX= 0,12,N,N,18,N,N,N,N,N,N,N,N,N,N,N,N, 12,0,3,3,N,N,N,N,N,N,N,N,N,N,N,N,N, N,3,0,4,N,N,19,N,N,N,N,N,N,N,N,N,N, N,3,4,0,7,N,N,21,N,N,N,N,N,N,N,N,N, 18,N,N,7,0,N,N,N,N,31,N,N,N,N,N,N,N, N,N,N,N,N,0,N,N,N,12,N,N,N,N,N,N,N , N,N,19,N,N,N,0,4,N,N,N,7,N,N,N,N,N, N,N,N,21,N,N,4,0,13,N,6,
10、N,N,N,N,N,N, N,N,N,N,N,N,N,13,0,N,N,N,N,9,N,N,N, N,N,N,N,31,12,N,N,N,0,N,N,N,N,N,N,35, N,N,N,N,N,N,N,6,N,N,0,5,6,N,N,N,N, N,N,N,N,N,N,7,N,N,N,5,0,N,N,N,14,N, N,N,N,N,N,N,N,N,N,N,6,N,0,9,6,N,N , N,N,N,N,N,N,N,N,9,N,N,N,9,0,N,N,24, N,N,N,N,N,N,N,N,N,N,N,N,6,N,0,6,8, N,N,N,N,N,N,N,N,N,N,N,14,N,N,6,0,7,
11、 N,N,N,N,N,N,N,N,N,35,N,N,N,24,8,7,0, ; Floyed(cost,17,k,x); return 0; 程序调试及测试结果图1 程序调试过程截图图2程序调试过程截图图3程序调试过程截图图4程序测试结果截图结论本题目所涉及的问题主要是算法和存储结构的选择两个方面。算法采用弗洛伊德算法,运用邻接矩阵解决存储问题并解决在此结构情况下对矩阵中元素的扫描计算。参考文献1.数学实验傅鹂 龚劬 刘琼荪 何中市 科学出版社2.数据结构教程C语言版张绍民 李淑华 中国电力出版社3.数据结构实验教程C语言版王国钧 唐国民 清华大学出版社4.数据结构与算法陈文博 朱青机械工业出版社
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1