数据结构课程设计大作业.docx

上传人:b****6 文档编号:7421916 上传时间:2023-01-23 格式:DOCX 页数:8 大小:235.20KB
下载 相关 举报
数据结构课程设计大作业.docx_第1页
第1页 / 共8页
数据结构课程设计大作业.docx_第2页
第2页 / 共8页
数据结构课程设计大作业.docx_第3页
第3页 / 共8页
数据结构课程设计大作业.docx_第4页
第4页 / 共8页
数据结构课程设计大作业.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

数据结构课程设计大作业.docx

《数据结构课程设计大作业.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计大作业.docx(8页珍藏版)》请在冰豆网上搜索。

数据结构课程设计大作业.docx

数据结构课程设计大作业

数据结构课程设计大作业

130821班

题目最短路径问题

专业计算机科学与技术

学生姓名

学号130821XX

指导教师唐国民

完成日期2014.11.25

湖州师院信息工程学院

最短路径问题

【内容摘要】

【关键字】最短路径图论Floyd算法

【Abstract】

【Keywords】Shortestpath,Graphtheory,Floydalgorithm

实验内容概述

这是一幅美国硅谷的简单地图。

对于此图,请写出一个完整的程序,对于输入的起点和终点,输出它们之间的最短路径。

实验目的概述

在实际生活中诸如在运输路线、出外旅游路线、厂址选择等诸多方面都会有最短距离的应用。

本实验中的问题是求任意两点间最短距离的问题,而实验的目的是运用邻接矩阵解决图存储并解决在此结构情况下对矩阵中元素的扫描计算。

其关键是怎样储存和计算。

储存用的是邻接矩阵,而计算用的是弗洛伊德算法。

通过该实验更好地体会并进一步认识邻接矩阵,知道弗洛伊德算法在解决任意两点之间最短距离问题方面上的优势。

解题思路的描述

本题是求美国硅谷中任意两点之间的最短距离,由于题意是求任意两点之间的最短路径首先考虑到弗洛伊德算法,并且需要使用邻接矩阵来解决存储问题。

 

源程序清单

#include

#include

#include

usingnamespacestd;

#defineN99999

#defineMAXVEX20

structnode

{

intnum;

stringname;

}numbers[17];

voidFloyed(intcost[][MAXVEX],intn,intm,intx)

{

intA[MAXVEX][MAXVEX],path[MAXVEX][MAXVEX];

inti,j,k,pre;

for(i=0;i

for(j=0;j

{

A[i][j]=cost[i][j];

path[i][j]=-1;

}

for(k=0;k

{

for(i=0;i

for(j=0;j

if(A[i][j]>(A[i][k]+A[k][j]))

{

A[i][j]=A[i][k]+A[k][j];

path[i][j]=k;

}

}

if(m!

=x)

{

cout<"<

if(A[m][x]==N)

{

if(m!

=x)

cout<<"该路径不存在\n"<

}

else

{

cout<<"最短路径长度是:

"<

cout<<"具体路径为:

"<

pre=path[m][x];

while(pre!

=-1)

{

cout<

pre=path[pre][x];

}

cout<

}

}

}

intmain(void)

{

inti,k,l,x;;

cout<<"美国硅谷地图最短路线查询表"<

cout<<"-----序号-------地点名称------"<

cout<<"0SanRapheal"<

cout<<"1Cross"<

cout<<"2DalyCit"<

cout<<"3SanFrancisco"<

cout<<"4Oakland"<

cout<<"5SanLarenzo"<

cout<<"6CrossB"<

cout<<"7SanMaleo"<

cout<<"8Hayward"<

cout<<"9Dubin"<

cout<<"10RedwoodCity"<

cout<<"11CrossC"<

cout<<"12PaloAlso"<

cout<<"13Freemood"<

cout<<"14MinView"<

cout<<"15Cupertin"<

cout<<"16SanJose"<

cout<

numbers[0].num=0;numbers[0].name="SanRapheal";

numbers[1].num=1;numbers[1].name="Cross";

numbers[2].num=2;numbers[2].name="DalyCit";

numbers[3].num=3;numbers[3].name="SanFrancisco";

numbers[4].num=4;numbers[4].name="Oakland";

numbers[5].num=5;numbers[5].name="SanLarenzo";

numbers[6].num=6;numbers[6].name="CrossB";

numbers[7].num=7;numbers[7].name="SanMaleo";

numbers[8].num=8;numbers[8].name="Hayward";

numbers[9].num=9;numbers[9].name="Dubin";

numbers[10].num=10;numbers[10].name="RedwoodCity";

numbers[11].num=11;numbers[11].name="CrossC";

numbers[12].num=12;numbers[12].name="PaloAlso";

numbers[13].num=13;numbers[13].name="Freemood";

numbers[14].num=14;numbers[14].name="MinView";

numbers[15].num=15;numbers[15].name="Cupertin";

numbers[16].num=16;numbers[16].name="SanJose";

cout<<"输入你要查询的起始地点的序号:

";

cin>>k;

cout<

cout<<"输入你要查询的终止地点的序号:

";

cin>>x;

cout<

cout<<"以下是从"<

"<

intcost[17][MAXVEX]=

{

{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,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},

{N,N,N,N,N,N,N,N,N,35,N,N,N,24,8,7,0},

};

Floyed(cost,17,k,x);

return0;

}

程序调试及测试结果

图1程序调试过程截图

图2程序调试过程截图

图3程序调试过程截图

图4程序测试结果截图

结论

本题目所涉及的问题主要是算法和存储结构的选择两个方面。

算法采用弗洛伊德算法,运用邻接矩阵解决存储问题并解决在此结构情况下对矩阵中元素的扫描计算。

参考文献

1.《数学实验》傅鹂龚劬刘琼荪何中市科学出版社

2.《数据结构教程C语言版》张绍民李淑华中国电力出版社

3.《数据结构实验教程C语言版》王国钧唐国民清华大学出版社

4.《数据结构与算法》陈文博朱青机械工业出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1