某公园导游图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子信息工程学系实验报告
课程名称:数据结构Array实验项目名称:某公园导游图实验时间:
班级:姓名:学号:
实验目的:
1.掌握图的基本存储方法。
2.掌握有关图的操作算法并用高级语言编程实现;
3.熟练掌握求图的最短路径的方法。
4.巩固和加深对各种数据结构的理解。
5.掌握恰当选用数据结构并设计与实际问题相符的算法的能力。
实验环境:
一人一台微机,安装windows系统及vc++6.0或TC开发环境。
实验内容及过程:
给出一张某公园的导游图(景点不少于10个),游客通过终端询问可知:
1.任一景点的相关信息
2.从某一景点到另一景点的最短路径
实验结果及分析:
程序:
#include
#define MaxValue 100 /*定义最大值即无穷大用100来代替*/
void ADJMATRIX( int A[][7],int n,int e) /*采用邻接矩阵的方法来存储图*/
{int i,j,k,weight;
for(i=0;i for(j=0;j if(i==j) A[i][j]=0; else A[i][j]=MaxValue; } /*邻接矩阵赋初值其中顶点到顶点本身路径规定为0*/ for(k=0;k scanf("%d,%d,%d",&i,&j,&weight); /*输入一个顶点偶对与权值*/ A[i][j]=weight; A[j][i]=weight; } } void SHORTEST_PA TH(int cost[][7],int v,int n, int dist[],int path[7]) { int i,w,u,cout,s[7],j; int min=100; /*在后面找最短路径顶点要用到该值*/ for(i=0;i s[i]=0; /*标记数组置0*/ dist[i]=cost[v][i]; /*将邻接矩阵第V行元素依次送dist数组*/ } /*对数组进行初始化*/ s[v]=1; cout=1; /*计数器赋初值1*/ path[cout-1]=v+1; /*用数组path来存储经过的路径或说是顶点*/ while(cout min=100; for(j=0;j if(s[j]==0&&dist[j] {min=dist[j];u=j;} s[u]=1; cout++; path[cout-1]=u+1; for(j=0;j {if(s[j]==0&&dist[u]+cost[u][j] dist[j]=dist[u]+cost[u][j]; } } for(j=0;j printf("%d->",path[j]); } void main () {int cost[7][7], dist[7], path[7][7],a,b,c; ADJMA TRIX(cost,7,9) ; /*调用函数ADJMATRIX( int A[][7],int n,int e)生成图的邻接矩阵结构*/ for(a=0;a<7;a++){ /*该for语句作用是输出所创建的图——以邻接矩阵输出*/ for(b=0;b<7;b++) printf("%-4d",cost[a][b]); printf("\n"); } printf("\n\nPlease input the source v:"); scanf("%d",&c); /* 控制输入点即源点*/ SHORTEST_PA TH(cost,c,7, dist,path); /* 调用函数SHORTEST_PA TH(int cost[][7],int v,int n, int dist[],int path[7])得到最短路径*/ getch(); } 分析: 为了便于分析本次试验我采用课本的数据 运行结果: 其中100表示的是无穷大,运行结果为源点到顶点2的最短路径。实验心得: