某公园导游图

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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]0)

{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的最短路径。实验心得:

相关文档
最新文档