厦门大学校园导游系统(图论)
厦门大学校园导游系统(图论)
1、源代码
由之前的Dijstra算法和Floyd算法改造
#include <iostream>
#include<stdlib.h>
#include<queue>
#include<stdio.h>
using namespace std;
void pipei(int i);
using namespace std;
typedef int ArcCell; //直接存放权值
typedef struct{ArcCell** arcs; //邻接矩阵,二维数组int vexnum,arcnum; //图中当前顶点数和弧数int *info; //顶点向量,与邻接矩阵的数组下标对应,顶点的相关信息,可修改数据结构进行添加信息
}MGraph;
MGraph Graph;
//创建邻接矩阵
void CreatGraph(){Graph.vexnum=11;Graph.arcnum=12;Graph.arcs=(ArcCell**)malloc((Graph.vexnum+1)*sizeof(ArcCell*)); //动态开辟二维数组,0号单元不用Graph.info=(int*)malloc((Graph.vexnum+1)*sizeof(int));for(int i=0;i<=Graph.vexnum;i++)Graph.arcs[i]=(ArcCell*)malloc((Graph.vexnum+1)*sizeof(ArcCell));for(int i=0;i<=Graph.vexnum;i++)for(int j=0;j<=Graph.vexnum;j++)Graph.arcs[i][j]=0; //邻接矩阵全部置0,初始化Graph.arcs[1][2]=200;Graph.arcs[2][1]=200;Graph.arcs[1][3]=100;Graph.arcs[3][1]=100;Graph.arcs[3][5]=100;Graph.arcs[5][3]=100;Graph.arcs[3][4]=200;Graph.arcs[4][3]=200;Graph.arcs[4][6]=100;Graph.arcs[6][4]=200;Graph.arcs[6][8]=200;Graph.arcs[8][6]=200;Graph.arcs[4][7]=200;Graph.arcs[7][4]=200;Graph.arcs[8][9]=300;Graph.arcs[9][8]=200;Graph.arcs[7][9]=400;Graph.arcs[9][7]=200;Graph.arcs[7][10]=100;Graph.arcs[10][7]=200;Graph.arcs[9][11]=100;Graph.arcs[11][9]=200;Graph.arcs[10][11]=400;Graph.arcs[11][10]=200;
}void view( ) //浏览校园地图
{system("cls");printf("\t 厦门大学 \n");printf("\t --------------------------------------------------------|\n");printf("\t| 1 | 2 | 面朝大海,春暖花开 |\n");printf("\t| 演武场 | 演武大桥 | ------------ |\n");printf("\t| 3 ----welcome----- |\n");printf("\t| 明培体育馆 --------------- ‖-------------------- |\n");printf("\t| | 5 科艺中心 | |\n");printf("\t|========= | | |\n");printf("\t| 4 | 6 | |8 芙蓉餐厅| |\n");printf("\t| 嘉庚楼群 | 芙蓉湖 | |\n");printf("\t| ‖ | | |\n");printf("\t========= ==============================================|\n");printf("\t|------- |\n");printf("\t| |‖ ‖ |\n");printf("\t| 图 |‖ ‖ |\n");printf("\t| 7 书 |‖ ‖ |\n");printf("\t| 馆 |‖ ‖ ‖ |9 勤业餐厅| ‖ |\n");printf("\t|======================================================== |\n");printf("\t| -------------- |\n");printf("\t| | | 11 |\n");printf("\t| | 10 南校门 | |芙蓉隧道| |\n");printf("\t -------------------------------------------------------- \n");printf("\t 输入1遍历所在位置到景点的距离. \n");printf("\t 输入2遍历所有位置的距离. \n");
}//Dijkstra算法(从某个源点到其余各顶点的最短路径)
/* 最短路径类型定义 */
#define INF 10000 //定义无穷大
void Dijkstra(MGraph G, int v0)
{int set[G.vexnum+1];int min,i,j,v;int tmp[G.vexnum+1],k;int path1[G.vexnum+1]; //path[i]表示从源点到顶点i之间最短路径的前驱节点int dist1[G.vexnum+1]; //记录源点到顶点i之间的最短路径长度,dist的初值为arcs[v0][i]for(i=1;i<=G.vexnum;i++){//数组初始化if(G.arcs[v0][i])dist1[i]=G.arcs[v0][i]; //dist1[i]:v0到i的最短路径长度else dist1[i]=INF; //dist为无穷大set[i]=0; //set[i]:标记数组,标记各顶点是否已加入路径if(G.arcs[v0][i])path1[i]=v0; //path1[i]:保存从v0到vi路径上vi的前一个顶点elsepath1[i]=-1; //代表v0到vi中间不经过任何顶点(可能不通,也可能是自身)}set[v0]=1;path1[v0]=-1;for(i=1;i<=G.vexnum;i++){ //初始化结束,关键操作开始(判断其余G1.vexnum-1个顶点)min=10000;for(j=1;j<=G.vexnum;j++){ //选出v0到剩余顶点中最短的一条路径if(!set[j] && dist1[j]<min){v=j;min = dist1[j]; //v0到剩余顶点的最短路径<v0, v>}}set[v]=1; //将顶点v加入最短路径for(j=1;j<=G.vexnum;j++){ //判断v的加入是否会造就v0到剩余顶点的更短路径if(!set[j] && min && G.arcs[v][j] && (min+G.arcs[v][j])<dist1[j]){dist1[j]=min+G.arcs[v][j];path1[j]=v;}}}//输出路径for(i=1; i<=G.vexnum; i++){if(v0!=i){pipei(v0);cout<<"到";pipei(i);cout<<"的路径为:";if(path1[i]==-1)printf("×");else{tmp[0] = 0; //计数路径上的顶点个数if(v0!=i){k = i;do{tmp[0]++;tmp[tmp[0]] = k;k = path1[k];}while(path1[k]!=-1);}if(tmp[0]){for(j=tmp[0];j>=1;j--)pipei(tmp[j]);//printf("%d ", G.info[tmp[j]]); //tmp数组记录路径并输出}}printf(",路程为:");if(dist1[i]==INF)printf("∞\n");elseprintf("%2d\n", dist1[i]);}}
}void pipei(int i){switch(i){case 1 :printf("演武场.");break;case 2 :printf("演武大桥.");break;case 3 :printf("明培体育馆.");break;case 4 :printf("嘉庚楼群.");break;case 5 :printf("科艺中心.");break;case 6 :printf("芙蓉湖.");break;case 7 :printf("图书馆.");break;case 8 :printf("芙蓉餐厅.");break;case 9 :printf("勤业餐厅.");break;case 10 :printf("南校门.");break;case 11 :printf("芙蓉隧道.");break;}
}
//Floyd算法求各顶点之间最短路径
void Floyd(MGraph G)
{int i, j, k;int path[20][G.vexnum+1];int dist[20][G.vexnum+1];int tmp[G.vexnum+1];for(i=1;i<=G.vexnum;i++){ //赋初值for(j=1; j<=G.vexnum; j++){if(G.arcs[i][j])dist[i][j] = G.arcs[i][j];else dist[i][j]=INF;path[i][j] = -1;}}for(k=1;k<=G.vexnum;k++){ //以k为中间点检测各对顶点间距离for(i=1;i<=G.vexnum;i++){for(j=1;j<=G.vexnum;j++){if(i!=j && dist[i][k]!=INF && dist[k][j]<INF && dist[i][k]+dist[k][j]<dist[i][j]){dist[i][j] = dist[i][k] + dist[k][j];path[i][j] = k;}}}}//输出各对顶点之间路径for(i=1;i<=G.vexnum;i++){for(j=1; j<=G.vexnum; j++){if(i!=j){pipei(i);cout<<"到";pipei(j);cout<<"的最短路径为:";//printf("%d 到 %d 的最短路径为:", G.info[i], G.info[j]);if(dist[i][j]!=INF){pipei(i);//printf("%d ", G.info[i]);k = i;while(path[k][j]!=-1){pipei(path[k][j]);//printf("%d ", G.info[path[k][j]]);k = path[k][j];}pipei(j);//printf("%d ", G.info[j]);}elseprintf("×");printf(",路程为:");if(dist[i][j]==INF)printf("∞\n");elseprintf("%d\n", dist[i][j]);}}}
}int main() {view();int a,b;scanf("%d",&b);CreatGraph();if(b==1) {printf("输入现在所在的位置:");scanf("%d", &a);Dijkstra(Graph, a);}else if(b==2) {printf("\n");Floyd(Graph);}return 0;
}
2、界面(不太友好啊)
厦门大学校园导游系统(图论)相关推荐
- 校园导游系统c语言代码,GitHub - iamywang/Campus-Guide-System: 校园导游系统
校园导游系统 Qt5 图形界面版本 v2.1.5 更新内容 2019.2.25 Version 2.1.5 新增道路信息查询功能,输入道路起点和终点即可查询道路具体信息 新增范例地图,支持一键录入已有 ...
- 校园导游java版,校园导游系统Word版
<校园导游系统Word版>由会员分享,可在线阅读,更多相关<校园导游系统Word版(20页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有帮助,可双击 ...
- 校园导游系统数据结构课程设计(附完整代码)
1 问题内容与目的要求 1.1 算法产生的背景: Floyd 算法又称为加点法.插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法.该算法名称以创始人之一.1978 年图灵奖获 ...
- 校园导游系统_C语言实现_Dijkstra(迪杰斯特拉算法)_数据结构
西京学院导游系统 摘要 要完成对整个导游图系统的功能实现,需要对每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现和需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确 ...
- c语言 校园导游系统,校园导游系统
<校园导游系统>由会员分享,可在线阅读,更多相关<校园导游系统(9页珍藏版)>请在人人文库网上搜索. 1.校园导游系统问题说明设计为来访客人提供多种信息查询服务的校园导游计划基 ...
- java校院导游程序课程设计_数据结构课程设计之校园导游系统
数据结构课程设计之校园导游系统 放假到现在终于安下心来要搞点学习了,现在对放假前一周的数据结构课设做一个总结,快放假的时候搞数据结构课设,当时满脑子都是期末考试忙着复习,根本没啥心思去做.所以课设一共 ...
- 校园导游系统(源码)
校园导游系统(源码) #include<stdio.h> #include<string.h> #include<stdlib.h> #include<win ...
- 校园导游系统(Java语言)
** 利用Java语言写的校园导游系统 ** 这个是主要利用了迪杰斯特拉算法写成的,有增加路径,景点等操作. 由于这个地图是用Java中的io流来读取的,因此需要写一个文件. 文件格式如下: 注意: ...
- 《数据结构课设》弗洛伊德算法设计校园导游系统
大二上学期的数据结构课设分享一下,具体题目如下: 题目27:"校园导游系统"的设计与实现 1.问题描述 设计一个校园导游系统,为来访的客人提供信息查询服务. 2.基本要求 (1)从 ...
最新文章
- 2021年大数据Spark(十四):Spark Core的RDD操作
- RISC-V生态未来的三种可能~
- Shell脚本判断IP是否合法性(多种方法)
- 计算机在轻化工程中的应用,计算机在基础化学实验当中的应用
- 华为产品技术学习笔记之路由原理(二)
- [云炬创业基础笔记]第七章创业资源测试4
- s5pv210——I2C的代码实践
- 专访 YYKit 作者 ibireme: 开源大牛是怎样炼成的
- 交叉编译中libtool相关的问题
- 学习日志day52(2021-09-22)(1、SpringMVC文件上传 2、Spring发送邮件 3、拦截器 4、日志 )
- linux--磁盘配额
- Pygame实战:Python趣味编程之我的兔子终于变了游戏啦
- github官网老是打不开
- 局域网添加DNS服务器进行域名解析
- [大学物理实验-5]波尔共振实验
- 嵌入式之uboot源码分析-启动第二阶段学习笔记(下篇)
- 学校标准化计算机室的设备配置,幸福小学创建标准化学校汇报材料
- ①Linux简明系统编程(嵌入式公众号的课)---总课时12h
- [前端优化]基于H5移动端优化总结
- 计算机专业助我成长400字作文,坚持伴我成长作文400字(通用10篇)