校园导游咨询系统源代码

合集下载

校园导游系统设计与实现

校园导游系统设计与实现

校园导游系统设计与实现第一篇:校园导游系统设计与实现校园导游系统设计与实现目录 1.设计要求 2.1需求分析 2.2概要设计2.3各个模块名称和功能 2.4 系统导游主界面2.4.1前台系统2.4.2后台系统2.4.3退出系统 3实验总结参考文献附件1.设计要求设计一个校园导游程序,为来访的客人提供各种信息查询服务。

2.1需求分析⑴设计学校的校园平面图。

选取若干个有代表性的景点抽象成一个无向带权图(无向网),所含景点不少于 30 个。

以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。

⑵存放景点代号、名称、简介等信息供用户查询。

⑶为来访客人提供图中任意景点相关信息的查询。

⑷为来访客人提供图中任意景点之间的问路查询。

⑸可以为校园平面图增加或删除景点或边,修改边上的权值等。

景点距离图2.2概要设计校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。

用图的结点代表景点,用图的边代表景点之间的路径。

所以首先应设计一个图类。

结点值代表景点信息,边的权值代表景点间的距离。

结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。

本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。

计算路径长度和最短路线时可用迪杰斯特拉(Dijkastra)算法实现。

最后用 switch 选择语句选择执行浏览景点信息或查询最短路径。

1、主界面设计为了实现校园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。

2、存储结构设计本系统采用图结构类型(mgraph)存储抽象校园图的信息。

其中,各景点间的邻接关系用图邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的条数由分量 vexnum、arcnum 表示,它们是整型数据。

校园导游程序c课程设计

校园导游程序c课程设计

校园导游程序c课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中数组、函数、指针等基本概念及其应用;2. 学生能运用结构体、文件操作等知识模块,实现校园导游程序的基本功能;3. 学生了解并掌握程序设计中模块化、结构化的基本方法。

技能目标:1. 学生能运用C语言编写具有实用价值的程序,具备一定的编程能力;2. 学生通过校园导游程序的设计,培养解决实际问题的能力;3. 学生能够进行程序调试与优化,提高程序性能。

情感态度价值观目标:1. 学生在课程学习中,培养对编程的兴趣和热情,树立自信心;2. 学生通过团队合作,培养沟通、协作能力,增强团队意识;3. 学生能够关注校园文化,将课程与实际生活相结合,提高社会责任感。

课程性质分析:本课程为C语言编程实践课,旨在让学生通过实际项目的开发,巩固所学知识,提高编程能力。

学生特点分析:学生已具备C语言基础,具有一定的编程能力,但实际应用经验不足。

教学要求:结合学生特点,课程注重实践操作,引导学生运用所学知识解决实际问题,提高学生的编程素养。

将目标分解为具体的学习成果,以便后续的教学设计和评估。

1. C语言基础知识回顾:数组、函数、指针、结构体、文件操作等;2. 程序设计方法:模块化、结构化编程;3. 校园导游程序功能需求分析:地图展示、路径规划、景点介绍等;4. 校园导游程序设计与实现:- 数据结构设计:景点结构体定义、路径数组等;- 功能模块实现:地图展示、路径规划算法、景点信息查询等;- 界面设计:命令行界面设计、功能菜单编写等;5. 程序调试与优化:调试技巧、性能优化方法;6. 团队合作与项目展示:分组合作、项目汇报与评价。

教学大纲安排:1. 第一周:C语言基础知识回顾,理解并掌握基本概念;2. 第二周:程序设计方法学习,分析校园导游程序需求;3. 第三周:校园导游程序数据结构设计,功能模块划分;4. 第四周:实现各功能模块,编写界面代码;5. 第五周:进行程序调试与优化,确保程序稳定运行;6. 第六周:团队合作,完成项目展示与评价。

c语言校园导游课程设计

c语言校园导游课程设计

c语言校园导游课程设计一、教学目标本课程旨在通过C语言编程,使学生掌握基本的编程技能,并应用于校园导游系统的开发。

具体目标如下:1.理解C语言的基本语法和数据结构。

2.掌握函数的定义和调用。

3.了解面向对象编程的基本概念。

4.能够使用C语言编写简单的程序。

5.能够利用面向对象编程设计校园导游系统。

6.能够进行程序调试和优化。

情感态度价值观目标:1.培养学生的创新意识和解决问题的能力。

2.培养学生团队合作和沟通的能力。

3.培养学生对编程和计算机科学的兴趣。

二、教学内容教学内容将按照以下大纲进行:1.C语言基础:介绍C语言的基本语法和数据结构,包括变量、运算符、控制语句等。

2.函数:讲解函数的定义、声明和调用,包括递归函数和作用域规则。

3.面向对象编程:介绍类和对象的概念,讲解构造函数、析构函数和继承等。

4.校园导游系统设计:引导学生利用C语言编程实现校园导游系统的基本功能,如景点介绍、路径规划等。

三、教学方法将采用多种教学方法相结合,以激发学生的学习兴趣和主动性:1.讲授法:讲解C语言基础知识和编程技巧。

2.案例分析法:分析典型的校园导游系统案例,引导学生思考和解决问题。

3.实验法:安排实验课,让学生动手编写代码和调试程序。

4.讨论法:学生进行小组讨论,促进团队合作和沟通。

四、教学资源将提供以下教学资源,以支持教学内容和教学方法的实施:1.教材:《C语言程序设计教程》2.参考书:《C Primer Plus》、《C++ Primer》3.多媒体资料:PPT课件、编程实例视频教程4.实验设备:计算机、编程环境(如Visual Studio、Code::Blocks)5.在线资源:编程论坛、开源校园导游系统项目五、教学评估教学评估将采用多元化的方式,全面客观地评价学生的学习成果。

评估方式包括:1.平时表现:通过课堂参与、提问和小组讨论等环节,评估学生的学习态度和参与度。

2.作业:布置编程作业,评估学生的编程能力和解决问题的能力。

c语言校园导游课程设计

c语言校园导游课程设计

c语言校园导游课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中数组、函数、指针等基本概念及其在程序设计中的应用。

2. 学生能够运用C语言编写具有实际意义的程序,如校园导游系统,实现对校园景点信息的存储、查询和展示。

3. 学生了解结构体和文件操作在C语言中的应用,能够实现对校园导游系统中数据的组织、存储和读取。

技能目标:1. 学生掌握C语言编程的基本技巧,具备分析问题、设计算法和编写程序的能力。

2. 学生能够运用所学知识,独立设计并实现一个简单的校园导游系统,提高实际编程能力。

3. 学生通过课程学习,培养解决实际问题的能力,提高逻辑思维和团队协作能力。

情感态度价值观目标:1. 学生对C语言编程产生兴趣,树立学习信心,形成积极的学习态度。

2. 学生在学习过程中,培养良好的编程习惯,注重程序的可读性和可维护性。

3. 学生通过课程学习,认识到编程在解决实际问题中的重要性,激发对计算机科学技术的热爱。

课程性质:本课程为C语言程序设计实践课程,结合实际应用场景,培养学生的编程能力和解决实际问题的能力。

学生特点:学生具备一定的C语言基础,对编程感兴趣,但实际编程经验不足。

教学要求:教师应注重理论与实践相结合,引导学生运用所学知识解决实际问题,关注学生的个体差异,提高学生的编程能力和综合素质。

教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。

二、教学内容1. 数组与函数:回顾数组的使用,强调其在存储大量数据时的优势;讲解函数的定义、调用和参数传递,强调模块化编程的重要性。

- 教材章节:数组、函数- 内容列举:一维数组、二维数组、函数定义、函数调用、局部变量、全局变量2. 指针与结构体:介绍指针的概念,讲解指针的使用方法;引入结构体,展示如何利用结构体组织相关数据。

- 教材章节:指针、结构体与联合- 内容列举:指针变量、指针运算、结构体定义、结构体变量、结构体数组3. 文件操作:讲解文件的基本概念,介绍文件读写操作,为校园导游系统数据存储提供支持。

校园导航系统的两个代码

校园导航系统的两个代码

#1 数据结构实验之校园导游咨询#include<>#include<>#include<>#include<>#include<>#include ""#define null 0#define num 20#define maxdist 10000typedef struct{char data[num];int edges[num][num];}graph;void dijkstra(graph g,int n,int i,int d[num],int p[num]) {int s[num];int mindist,dist;int j,k,u;for(j=0;j<n;j++){d[j]=[i][j];s[j]=0;if((d[j]<maxdist)&&(d[j]!=0))p[j]=i;elsep[j]=-1;}s[i]=1;for(j=0;j<n-1;j++){mindist=maxdist;u=i;for(k=0;k<n;k++)if((s[k]==0)&&(d[k]<mindist)){u=k;mindist=d[k];}s[u]=1;for(k=0;k<n;k++)if(s[k]==0){dist=d[u]+[u][k];if(dist<d[k]){d[k]=dist;p[k]=u;}}}void opdijk(int v0,int n,int d[],int p[]){int i,pre;for(i=0;i<n;i++)if(i!=v0){printf("\n%d",i);pre=p[i];while(pre!=-1){printf("<--%d",pre);/****************************/ pre=p[pre];}if(d[i]==maxdist)printf("<--%d",v0);printf("\tshortestway:%d",d[i]);}}void floyd(graph g,int n,int d[][num],int p[][num]){int i,j,k;for(i=0;i<n;i++)for(j=0;j<n;j++){d[i][j]=[i][j];if((d[i][j]<maxdist)&&(d[i][j]!=0))p[i][j]=j;elsep[i][j]=-1;}for(i=0;i<n;i++)d[i][i]=0;for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++)if(d[i][j]>d[i][k]+d[k][j]){d[i][j]=d[i][k]+d[k][j] ;p[i][j]=p[i][k];}}void opfloy(int n,int d[][num],int path[][num]){int i,j,next;for(i=0;i<n;i++){printf("\n\nyuandian is v%d:",i);for(j=0;j<n;j++){printf("\nthe shortest way from%dto%dis:\n",i,j);printf("%d",i);next=path[i][j];while(next!=-1){printf("->%d",next);next=path[next][j];}if(d[i][j]==maxdist)printf("<-%d",j);/***************************/printf("\t%d",d[i][j]);}}}void main(){graph g;int i,j,k,n;int d[num],p[num],sd[num][num],sp[num][num];点信息查询………请按s键\n");printf("2.景点最短路径查询…请按b键\n");printf("3.退出系统……………请按e键\n");printf("校园平面图如下:\n");printf(" 5------9-----7----8 \n");printf(" | \\ | / \n");printf(" | 4 | / \n");printf(" | \\ | / \n");printf(" 6 \n");printf(" | / \n");printf(" | / \n");printf(" 10 \n\n");printf("请选择服务:");scanf("\n%c",&k);switch(k){case 's':printf("进入景点信息查询:\n");introduce();break;case 'b': printf("进入最短路径查询:\n");shortestdistance();break; case 'e':exit(0);default:printf("Error Input\n请输入字母s或b或e.\n\n");break; }}}。

数据结构-校园导游程序(附源码)

数据结构-校园导游程序(附源码)

数据结构-校园导游程序(附源码)简介本文档旨在介绍一个校园导游程序的设计与实现。

该程序使用数据结构来管理校园地点信息,并提供导游功能,供用户查找并导航到目标地点。

文档将依次介绍相关的背景知识、程序设计原理、算法实现以及使用方法。

目录1.背景知识1.校园导游需求2.数据结构概述2.程序设计原理1.数据结构设计2.地点信息管理3.导航算法设计3.算法实现1.数据结构定义2.地点信息管理算法3.导航算法4.使用方法1.程序安装2.数据录入3.导游功能使用5.附录1.附件1:源码文件2.附件2:数据样例1.背景知识1.1 校园导游需求校园导游程序是为了帮助使用者在校园中快速找到目标地点,并提供导航功能,方便出行和参观。

该程序需要管理校园地点的信息,包括名称、位置和介绍等。

使用者可以通过程序查找地点、导航到目标地点。

1.2 数据结构概述数据结构是计算机中用来组织和存储数据的方式。

在校园导游程序中,我们需要选择适合的数据结构来存储和管理地点信息。

常用的数据结构有数组、链表、树、图等。

根据需求分析,我们可以使用图这一数据结构来表示校园地点之间的关系,方便进行导航。

2.程序设计原理2.1 数据结构设计在校园导游程序中,我们使用图这一数据结构来表示校园地点之间的关系。

每个地点可以看作图的一个节点,节点之间的边表示地点之间的连接关系。

通过构建图数据结构,我们可以方便地管理地点信息并进行导航。

2.2 地点信息管理地点信息管理是校园导游程序的核心功能之一。

我们需要设计适合的数据结构来存储地点的信息,包括名称、位置和介绍等。

通过合理的数据结构设计,可以快速地查找和修改地点信息。

2.3 导航算法设计导航算法是实现导游功能的关键。

我们需要设计算法来计算出从起点到目标地点的最短路径,并提供导航指引。

常用的导航算法有Dijkstra算法、A算法等,我们根据需求选择合适的算法进行实现。

3.算法实现3.1 数据结构定义我们使用图这一数据结构来表示校园地点之间的连接关系。

(完整word版)数据结构校园导游系统课程设计

(完整word版)数据结构校园导游系统课程设计

滨江学院《数据结构》课程设计题目校园导游咨询程序设计学号学生姓名院系专业指导教师二O一二年月日1、题目的内容及要求设计一个校园导游程序,为来访的客人提供各种信息查询服务。

2、需求分析(1)设计你的学校的校园平面图,所含景点不少于10个.以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

(3)为来访客人提供图中任意景点相关信息的查询。

3、概要设计1.功能模块图;void CreateUDN();//创建无向网void Search();//查询景点信息void Shortestpath(int i);//计算最短路径void Output(int sight1,int sight2);//输出函数2.各个模块详细的功能描述。

CreateUDN();//创建无向网、主要用来保存各景点信息Search();//查询景点信息、景点的名称及介绍Shortestpath(int i);//计算两景点间最短路径Output(int sight1,int sight2);//输出两景点最短路径及信息3。

模块图4、详细设计一、图的储存结构#define Max 30000#define NUM 10typedef struct ArcCell{int adj; /*相邻接的景点之间的路程*/ }ArcCell; /* 定义边的类型*/ typedef struct VertexType{int number;/*景点编号*/char *sight; /*景点名称*/char *description;/*景点描述 */}VertexType; /*定义顶点的类型 */typedef struct{VertexType vex[NUM]; /*图中的顶点,即为景点*/ ArcCell arcs[NUM][NUM];/* 图中的边,即为景点间的距离 */ int vexnum,arcnum;/* 顶点数,边数*/}MGraph; /* 定义图的类型二、算法1.主程序void main(){int v0,v1;char ck;CreateUDN(NUM,11);do{ck=Menu();switch(ck){case ’1’:system("cls”);// narrate();printf("\n\n\t\t\t请选择起点景点(0~9):”);scanf(”%d",&v0);printf(”\t\t\t请选择终点景点(0~9):”);scanf(”%d",&v1);ShortestPath(v0); /*计算两个景点之间的最短路径*/ output(v0,v1); /*计算两个景点之间的最短路径 */ printf("\n\n\t\t\t\t请按任意键继续。

校园导游咨询讲解

校园导游咨询讲解

《算法与数据结构》课程设计报告班级:专业级班姓名:学号:课程设计题目:校园导游咨询所属课程:算法与数据结构实验室(中心):指导教师:完成时间:年月日学院信息科学与工程学院课程设计任务书信息科学与工程学院课程设计成绩单指导教师:A课程设计课程名称:算法与数据结构性别男班级学号姓名指导教师算法与数据结构班级课程A2201完成时校园导游咨 201主介绍校园的景点,同时提供任意两点之间最短的路径内.封面.课程设计成绩单、课程设计任务.内容提要.“课程设计报告”正文部分主要应包括①问题分析和任务定义②环境简介③设计:主要是指数据结构与核心算法的设计描述;操作界设的设计;主要功能的算法框架;测试用例设计等内容(要求使报C+)要④编译参数与步骤的说明⑤上机调试总结与分析⑥用户使用说明⑦测试数据与测试结果等内容⑧课程设计总结:可以包括课程设计过程的收获、遇到的问及解决过程的思考、对数据结构这门课程的思考和认识等内容⑨附录程序清.参考文1题目用黑体三号,段后1磅(行),居中对齐2标题用黑体四号,段前、段后磅(0.版行)3正文用小四号宋体,行距1.2倍行距要4标题按“一”、“㈠”、“1”、“⑴”顺序编号星周指11-时1-安11-5-指专业实验406/40地点综合成绩□能正确运行□基本能正确运行□能运行但结果不完善程序运行情况15分)((10分)分)(20(占总成绩20%)□不完善□基本完善□完善程序功能完善程度分)(5(8分)(分)10)10%(占总成绩□不太合理□基本合理程序结构的合理性□合理5分)(8分)()(占总成绩10%分)(10□基本能正确回答□概念正确有创新□能正确回答所有问题30(分)40(分)(35分)对问题的答辩情况□部分问题回答概念不清晰40%(占总成绩)(20分)□工作态度认真能独立完成任务□工作态度认真但独立性较差学生的工作态度与(10分)(分)8独立工作能力□工作态度基本认真但缺乏独立性(占总成绩10%)(5分)□规范性较差□符合规范□基本符合规范设计报告的规范性(5分)10分)(8(分))10%(占总成绩.摘要数据结构课程设计对于训练学生掌握程序设计技术、使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。

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

#include<stdlib.h>//standard library标准库头文件#include<stdio.h>//标注输入输出函数头文件#include<string.h>//字符函数头文件#define MAX 10000 //定义路程最远距离符号常量无穷大#define MAX_VERTEX_NUM 10//定义的景点/顶点数量符号常量最大顶点数10个typedef struct //定义一个结构体用于表示路径{int adj; //路径长度权值}Ar,Ad[10][10];//起点和终点变量名typedef struct //定义一个结构体用于存放景点信息{char name[30];//景点名int num;//景点编号char introduction[100];//景点介绍}infotype;//景点信息变量名typedef struct//用来定义一个图{infotype vexs[10];Ad arcs;int vexnum,arcnum;}MGraph;MGraph b;MGraph InitGraph()//初始化图形{MGraph G;int i;int j;G.vexnum=10;G.arcnum=10;for(i=0;i<G.vexnum;i++)G.vexs[i].num=i;//用字符串复制把各个景点的信息传递给指针strcpy(G.vexs[0].name,"老校区宿舍");strcpy(G.vexs[0].introduction,"这里有夺命坡,冬天来这里一定要小心脚下");strcpy(G.vexs[1].name,"二教");strcpy(G.vexs[1].introduction,"同学们日常上课大多数都在这");strcpy(G.vexs[2].name,"石头楼");strcpy(G.vexs[2].introduction,"石头楼是我国著名建筑大师梁思成在美国宾西法尼亚大学建筑系毕业回国之后设计的第一件作品");strcpy(G.vexs[3].name,"主教");strcpy(G.vexs[3].introduction,"一座集实验教学于一体的教学楼,但是我没在里面上过课");strcpy(G.vexs[4].name,"媒体楼");strcpy(G.vexs[4].introduction,"信息院有一部分的上机课是在这里上的,在这里你还有可能艳遇到媒体系的美女呦");strcpy(G.vexs[5].name,"图书馆");strcpy(G.vexs[5].introduction,"自从新校区图书馆建成后这里就变成了纯粹的自习室,不过这里冬天真的很暖");strcpy(G.vexs[6].name,"专家招待所");strcpy(G.vexs[6].introduction,"这里是招待一些贵宾的地方,有些留学生也住在这儿");strcpy(G.vexs[7].name,"学术交流中心");strcpy(G.vexs[7].introduction,"这里经常会开很多高大上的会议,还会有外国友人出现在这");strcpy(G.vexs[8].name,"东街教学楼");strcpy(G.vexs[8].introduction,"这里也是一个日常上课比较多的地方,没课的时候来这里上自习也是不错的选择");strcpy(G.vexs[9].name,"校医院");strcpy(G.vexs[9].introduction,"新生的体检,打疫苗都在这,而且来这里买药真的很便宜");//运用双重循环给每条边赋权值for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[i][j].adj=MAX;G.arcs[0][1].adj=600;G.arcs[0][2].adj=600;G.arcs[0][3].adj=700;G.arcs[1][2].adj=50;G.arcs[1][4].adj=100;G.arcs[2][5].adj=150;G.arcs[2][3].adj=50;G.arcs[3][5].adj=250;G.arcs[4][5].adj=100;G.arcs[4][8].adj=450;G.arcs[5][6].adj=150;G.arcs[5][8].adj=200;G.arcs[6][7].adj=50;G.arcs[6][8].adj=100;G.arcs[6][9].adj=250;G.arcs[7][8].adj=100;G.arcs[7][9].adj=80;G.arcs[8][9].adj=50;for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[j][i].adj=G.arcs[i][j].adj;return G;}//菜单void Menu(){printf("\n *************************** 欢迎来到东北电力大学**************************\n");printf(" \n");printf(" 祝你:旅途愉快\n");printf(" \n");printf(" 1.浏览校园全景\n");printf(" 2.查看所有游览路线\n");printf(" 3.选择出发点和目的地\n");printf(" 4.查看各景点信息\n");printf(" 5.退出系统\n");printf(" \n");printf( "诚心为你服务-请选择(输入编号.回车结束):" );}//查看各景点信息函数void Browser(MGraph *G){int v;printf("\n");printf("编号.景点名称.简介 \n");for(v=0;v<G->vexnum;v++){printf("%-4d%-16s%-56s\n",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction);}printf("\n");printf("§·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽§\n");printf("§——>东§\n");printf("§§\n"); printf("§——————1.二教—————4. 媒体楼————————————§\n");printf("§┃┃┃┃§\n");printf("§┃┃┃┃§\n");printf("§ 0.老校区宿舍———2.石头楼————5.图书馆————————————┃§\n");printf("§┃┃┃┃§\n");printf("§┃┃┃————6.专家招待所———8.东街§\n");printf("§——————3.主教———————┃—__________/ ┃§\n");printf("§┃/ —┃§\n");printf("§ 7.学术交流中心————9.校医院§\n");printf("§§\n");printf("§·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·§\n");printf("请按任意键继续!");printf("\n");getch();}//查看所有浏览路线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("请输入一个起始景点编号0-9:");scanf("%d",&v0);if(v0<0||v0>G->vexnum){printf("景点编号不存在!请重新输入景点编号0-9:"); scanf("%d",&v0);}if(v0>=0&&v0<G->vexnum)flag=0;}for(v=0;v<G->vexnum;v++){final[v]=0;D[v]=G->arcs[v0][v].adj;for(w=0;w<G->vexnum;w++)p[v][w]=0;if(D[v]<MAX){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;for(i=1;i<G->vexnum;i++){min=MAX;for(w=0;w<G->vexnum;w++)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;for(w=0;w<G->vexnum;w++)if(!final[w]&&(min+G->arcs[v][w].adj<D[w])){D[w]=min+G->arcs[v][w].adj;for(x=0;x<G->vexnum;x++)p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;v<G->vexnum;v++){if(v0!=v) printf("%s",G->vexs[v0].name);for(w=0;w<G->vexnum;w++){if(p[v][w]&&w!=v0)printf("-->%s",G->vexs[w].name);t++;}if(t>G->vexnum-1&&v0!=v)printf("总路线长%dm\n\n",D[v]);}}//弗洛伊德算法用于求最短路void Floyd(MGraph *G){int v,u,i,w,k,j,flag=1,p[10][10],D[10][10];for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w]=0;if(D[v][w]<MAX){p[v][w]=1;p[v][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w]=p[v][u]||p[u][w];}while(flag){printf("请输入出发点和目的地的编号0-9如(* *):");scanf("%d%d",&k,&j);if(k<0||k>G->vexnum||j<0||j>G->vexnum){printf("景点编号不存在!请重新输入出发点和目的地的编号:"); scanf("%d%d",&k,&j);}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}printf("%s",G->vexs[k].name);for(u=0;u<G->vexnum;u++)if(p[k][j]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf(" 总路线长%dm\n",D[k][j]);}//查询单个景点信息void Search(MGraph *G)int k,flag=1;while(flag){printf("请输入要查询的景点编号0-9:");scanf("%d",&k);if(k<0||k>G->vexnum){printf("景点编号不存在!请重新输入景点编号0-9:");scanf("%d",&k);}if(k>=0&&k<G->vexnum)flag=0;}printf("\n");printf("编号.景点名称.简介\n");printf("%-4d%-16s%-56s\n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].i ntroduction);printf("\n");}int LocateVex(MGraph *G,char* v)/* 初始条件: 图G存在,v和G中顶点有相同特征*//* 操作结果: 若G中存在顶点v,则返回该顶点在图中位置;否则返回-1 */ {int c=-1,i;for(i=0;i<G->vexnum;i++)if(strcmp(v,G->vexs[i].name)==0){c=i;}return c;}void print(MGraph *G)//输出景点间距离{int v,w,t=0;for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){if(G->arcs[v][w].adj==MAX)printf("∞");//没有路输出无穷else printf("%-7d",G->arcs[v][w].adj);//有路输出权值和 t++;if(t%G->vexnum==0)printf("\n");}}//主函数void main(){ int i;b=InitGraph();//调用初始化地图函数Menu();//调用菜单函数scanf("%d",&i);while(i!=5){switch(i){case 1:system("cls");Browser(&b);Menu();break;case 2:system("cls");ShortestPath_DIJ(&b);Menu();break; case 3:system("cls");Floyd(&b);Menu();break;case 4:system("cls");Search(&b);Menu();break;default:exit(1);}scanf("%d",&i);}}。

相关文档
最新文档