校园导游程序实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安郵電學院

数据结构

课内实验报告书

院系名称:计算机学院

实验题目:校园导游程序

学生姓名:

专业名称:计算机科学与技术班级:

学号:

时间: 2011年11月28日指导教师:曾艳

一、实验题目:校园导游程序

二、实验目的:

通过本次实验,熟练掌握图的存储结构定义及其算法的实现,学会利用图结构来解决具体问题。

三、实验要求:

用无向网表示你所在的学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。

要求实现以下功能:

(1)查询各的相关信息;

(2)查询图中任意两个景点间的最短路径;

四、设计与实现过程

(1)存储结构定义

typedef struct Vertex

{

char vertexname1;

char vertexname2[20];

char info[100];

int change;

}VertexData;/*景点信息的定义*/

typedef struct ArcNode

{

int adj;/*权值*/

}ArcNode;

typedef struct

{

VertexData vertex[MAX_VERTEX_NUM];

ArcNode arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

int vexnum,arcnum;

int

Shortchange1[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_N UM];/*找到中转最少的路径*/

int

Shortchange2[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_N UM];/*找到距离最短的路径*/

int dist1[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

int dist2[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

GraphKind kind;

}AdjMatrix

(2)主要算法描述

int UserHandle1(AdjMatrix *G)/*景点介绍输出的函数*/

{

char s[3],n;

int ch;

getchar();

scanf("%s",s);

if(strlen(s)>1)

ch=(s[0]-'0')*10+(s[1]-'0');

else

{

n=s[0];

if(n>=48&&n<=57)

ch=n-'0';

else if(n>=65&&n<=90)

ch=n-'A'+1;

else

ch=n-'a'+1;

}

if(ch>0&&ch<=G->vexnum)

{

printf("\n\t%c.%s %s",G->vertex[ch-1].vertexname1,G->vertex[ch-1].vertexnam e2,G->vertex[ch-1].info);

return 1;

}

else

printf("\n\t输入有误,按回车键继续");

getch();

return 0;

}

void CreateShortChange(AdjMatrix *G)/*两个景点间的中转最少,距离最短的建立*/

{

int i,j,k,n,m,p;

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

{

G->dist1[i][j]=0;

for(k=0;kvexnum;k++)

G->Shortchange1[i][j][k]=G->Shortchange2[i][j][k]=0;

if(G->arcs[i][j].adj<0)

G->dist2[i][j]=-1;

else if(G->arcs[i][j].adj==0)

G->dist2[i][j]=0;

else

{

G->Shortchange1[i][j][0]=G->Shortchange2[i][j][0]=i+1;

G->Shortchange1[i][j][1]=G->Shortchange2[i][j][1]=j+1;

G->dist1[i][j]=G->arcs[i][j].adj;

G->dist2[i][j]=G->arcs[i][j].adj;

}

}

for(i=0;ivexnum;i++)

{

for(j=0;jvexnum;j++)

{

if(G->Shortchange1[i][j][0]>0)

for(k=0;kvexnum;k++)

{

if(G->Shortchange1[j][k][0]>0&&G->Shortchange1[i][k][0]==0&&i!=k)

{

for(n=0;G->Shortchange1[j][k][n]>0;n++);p=n;

for(;n>0;n--)

G->Shortchange1[i][k][n]=G->Shortchange1[j][k][n-1];

G->Shortchange1[i][k][0]=i+1;

for(m=0;m<=p;m++)

G->Shortchange1[k][i][m]=G->Shortchange1[i][k][p-m];

G->dist1[i][k]=G->dist1[i][j]+G->dist1[j][k];G->dist1[k][i]=G->dist1[i][k];

}

}

if(G->Shortchange2[i][j][0]>0)

for(k=0;kvexnum;k++)

{

if(G->Shortchange2[j][k][0]>0)

{

if(G->dist2[i][k]<0||((G->dist2[i][k]>G->dist2[i][j]+G->dist2[j][k])&&i!=k&&G->dist2[i][k]>0))

{

for(n=0;G->Shortchange2[j][k][n]>0;n++);p=n;

for(m=0;G->Shortchange2[i][k][m]>0;m++);

for(;m>n;m--)

{

G->Shortchange2[i][k][m-1]=0;

G->Shortchange2[k][i][m-1]=0;

}

for(;n>0;n--)

G->Shortchange2[i][k][n]=G->Shortchange2[j][k][n-1];

G->Shortchange2[i][k][0]=i+1;

for(m=0;m<=p;m++)

G->Shortchange2[k][i][m]=G->Shortchange2[i][k][p-m];

G->dist2[i][k]=G->dist2[i][j]+G->dist2[j][k];G->dist2[k][i]=G->dist2[i][k];

相关文档
最新文档