(003)(校园导游系统)c语言

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

校园导游咨询

一、目的

1、对自己学过的知识进一步的加深理解,对数据结构的算法思想要有更深的理解。

2、通过课程设计,学会通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。

3、学会综合运用数据结构课程中学到的数据结构和算法,如图的存储结构,数组,迪杰斯特拉算法和Floyd算法等自行实现一个较为完整的应用系统的设计与开发。

二、需求分析

1、功能需求

(1)在菜单中显示校园景点地图。

(2)能够查找任意景点的路径。

(3)能够自动查找用户键入始点景点和终点景点的最短路径。

(4)用户能够查询任意景点的景点信息。

2、输入

根据菜单提示键入相应的数字键已完成相应的操作。例如:在菜单界面中键入数字3,再根据系统提示键入始点和终点对应的编号,系统便会输出相应的路径。

3、输出

程序将根据用户键入的数字键,调用相应函数,完成查找过程,并将结果输出到屏幕。

三、概要设计

1、变量定义

typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介

{

char name[30];

int num;

char introduction[100];//简介

}infotype;

typedef struct ArCell //定义结构体变量来储存路径长度

{

int adj; //路径长度

}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM

typedef struct //景点信息的结构体定义:

{

infotype vexs[MAX_VERTEX_NUM];

AdjMatrix arcs;

int vexnum,arcnum;

}MGraph;

MGraph b;

2.函数模块

void cmd( );//菜单选择模块

MGraph InitGraph( );//赋值函数

void Menu(void);//菜单函数

void Browser(MGraph *G);//浏览景点信息的函数

void ShortestPath_DIJ(MGraph * G);//迪杰斯特拉算法void Floyd(MGraph *G);//Floyd 算法

void Search(MGraph *G);//查找景点信息函

()(MGraph *G);//初始化图形

void print(MGraph *G);//校园全景显示函数

3、流程图

四、详细设计

MGraph * CreatUDN(MGraph *G)//初始化图形,接受用户输入{

int i,j,k,w;

char v1[20],v2[20];

printf("请输入图的顶点数,弧数:");

scanf("%d %d",&G->vexnum,&G->arcnum);

printf("请输入景点的编号:、名称、简介:\n");

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

{

printf("景点编号:");

scanf("%d",&G->vexs[i].num);

printf("景点名称:");

scanf("%s",G->vexs[i].name);

printf("景点简介:");

scanf("%s",G->vexs[i].introduction);

}

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

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

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

printf("请输入路径长度:\n");

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

{

printf("第%d条边:\n",k+1);

printf("景点对(x,y):");

scanf("%s",v1);

scanf("%s",v2);

printf("路径长度:");

scanf("%d",&w);

i=LocateVex(G,v1);

j=LocateVex(G,v2);

if(i>=0&&j>=0)

{

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

G->arcs[j][i]=G->arcs[i][j];

}

}

return G;

}

void ShortestPath_DIJ(MGraph * G)

{

int v,w,i,min,t=0,x,flag=1,v0;

int final[20], D[20], p[20][20];

while(flag)

{

printf("请输入一个起始景点编号:");

scanf("%d",&v0);

if(v0<0||v0>G->vexnum)

{

printf("景点编号不存在!请重新输入景点编号:"); scanf("%d",&v0);

}

if(v0>=0&&v0vexnum)

flag=0;

}

for(v=0;vvexnum;v++)

{

final[v]=0;

D[v]=G->arcs[v0][v].adj;

for(w=0;wvexnum;w++)

p[v][w]=0;

if(D[v]

{

p[v][v0]=1;p[v][v]=1;

}

}

D[v0]=0;final[v0]=1;

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

{

min=INFINITY;

for(w=0;wvexnum;w++)

if(!final[w])

if(D[w]

final[v]=1;

for(w=0;wvexnum;w++)

if(!final[w]&&(min+G->arcs[v][w].adj

相关文档
最新文档