数据结构课程设计大作业文档格式.docx
《数据结构课程设计大作业文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计大作业文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
其关键是怎样储存和计算。
储存用的是邻接矩阵,而计算用的是弗洛伊德算法。
通过该实验更好地体会并进一步认识邻接矩阵,知道弗洛伊德算法在解决任意两点之间最短距离问题方面上的优势。
解题思路的描述
本题是求美国硅谷中任意两点之间的最短距离,由于题意是求任意两点之间的最短路径首先考虑到弗洛伊德算法,并且需要使用邻接矩阵来解决存储问题。
源程序清单
#include<
iostream>
cstdio>
cstring>
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<
n;
i++)
for(j=0;
j<
j++)
{
A[i][j]=cost[i][j];
path[i][j]=-1;
}
for(k=0;
k<
k++)
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<
<
numbers[m].name<
"
--->
<
numbers[x].name<
;
if(A[m][x]==N)
该路径不存在\n"
endl;
else
最短路径长度是:
"
A[m][x]<
米\n"
具体路径为:
----"
pre=path[m][x];
while(pre!
=-1)
cout<
numbers[pre].name<
pre=path[pre][x];
numbers[x].name<
endl;
}
intmain(void)
inti,k,l,x;
美国硅谷地图最短路线查询表"
-----序号-------地点名称------"
0SanRapheal"
1Cross"
2DalyCit"
3SanFrancisco"
4Oakland"
5SanLarenzo"
6CrossB"
7SanMaleo"
8Hayward"
9Dubin"
10RedwoodCity"
11CrossC"
12PaloAlso"
13Freemood"
14MinView"
15Cupertin"
16SanJose"
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"
输入你要查询的起始地点的序号:
cin>
>
k;
k<
\t"
numbers[k].name<
输入你要查询的终止地点的序号:
cin>
x;
x<
以下是从"
出发到"
的最短路径:
endl;
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.《数据结构与算法》陈文博朱青机械工业出版社