大二专业课太多,都没有好好的在博客上面做笔记,以备后面用的时候可以查找看一下,下面是写的不是完全正确的与图相关的代码~~希望指正~~

  1. /*
  2. Name:
  3. Copyright:
  4. Author:Hxm
  5. Date: 2016/05/16 22:57
  6. Description: 实验四(必做,设计性实验,6学时)
  7. 实验题目:校园导游咨询实验
  8. 目的:掌握图的存储方法和最短路经算法。
  9. 实验内容:设计一个校园导游程序,为来访客人提供各种信息查询服务。
  10. 测试数据根据实际情况指定。提示:一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向图。顶点和边均含有相关信息。
  11. 实验要求: 1、设计所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;
  12. 以边表示路径,存放路径长度等相关信息。
  13. 2、为来访客人提供图中任意景点相关信息的查询。
  14. 3、为来访客人提供图中任意景点的纹路查询,即查询任意两个景点之间的一条最短的简单路径。
  15. 实验内容和实验步骤:(由学生填写)
  16. 实验用测试数据和相关结果分析:(由学生填写)
  17. 实验总结:(由学生填写)
  18.  
  19. */
  20.  
  21. #include<stdio.h>
  22. #include<stdlib.h>
  23. #include<windows.h>
  24. #include<string.h>
  25.  
  26. //------图的数组(邻接矩阵)存储表示------------
  27. #define MAX 10000 //最大值
  28. #define N 11 //最大顶点个数
  29.  
  30. //--------------------景点结构--------------------------------------------------
  31. typedef struct MGraph
  32. {
  33. char *information; //景点名称
  34. int weight; //景点距离; 玲姐矩阵中的权值
  35. char vex[N]; // 顶点向量A-K
  36. int vexnum[N]; //景点数:0-10
  37. }MGraph, AdjMatrix[N][N];
  38.  
  39. //-------------------OUC图的定义(邻接矩阵)-------------------------------------
  40. static struct MGraph a[N][N], *g;
  41.  
  42. //-------------- 1. 首先向您展示OUC的地图O(∩_∩)O~~\n"); ----------------------
  43. void DisPlayMGraph()
  44. {
  45. int i,j,k;
  46. //预先直接构造校园的图:邻接矩阵
  47. //MGraph *g;
  48. //printf("test1......\n");
  49. for(i=0; i<N; i++)
  50. {
  51. for(j=0; j<N; j++)
  52. {
  53. if(i==j)
  54. a[i][j].weight=0;
  55. else
  56. a[i][j].weight=MAX;
  57. }
  58. }
  59.  
  60. //直接构造相互连接的路径
  61. for(i=0; i<N; i++)
  62. {
  63. for(j=0; j<N; j++)
  64. {
  65. a[0][1].weight=1;
  66. a[0][10].weight=10;
  67. a[1][0].weight=1;
  68. a[1][2].weight=2;
  69. a[1][9].weight=8;
  70. a[1][10].weight=9;
  71. a[2][1].weight=2;
  72. a[2][3].weight=3;
  73. a[2][8].weight=5;
  74. a[3][2].weight=3;
  75. a[3][6].weight=6;
  76. a[3][10].weight=10;
  77. a[4][3].weight=4;
  78. a[4][10].weight=10;
  79. a[5][4].weight=5;
  80. a[6][5].weight=6;
  81. a[7][3].weight=5;
  82. a[7][4].weight=6;
  83. a[7][9].weight=7;
  84. a[8][10].weight=10;
  85. a[9][1].weight=8;
  86. a[9][8].weight=7;
  87. a[10][0].weight=10;
  88. a[10][1].weight=9;
  89. a[10][3].weight=10;
  90. a[10][4].weight=10;
  91. a[10][8].weight=10;
  92. }
  93. }
  94.  
  95. //printf("test 2...\n");
  96. //构造景点的顶点向量
  97. for(i=0; i<11; i++)
  98. {
  99. for(j=0; j<11; j++)
  100. {
  101. a[0][i].vex[i]='A'+i;
  102. }
  103. }
  104.  
  105. //printf("test 3......\n");
  106. //景点的信息
  107. for(i=0; i<N; i++)
  108. {
  109. a[0][0].information="北区宿舍";
  110. a[0][1].information="康惠达超市";
  111. a[0][2].information="3区教学区 ";
  112. a[0][3].information="九球广场 ";
  113. a[0][4].information="信息学院 ";
  114. a[0][5].information="图书馆 ";
  115. a[0][6].information="南区宿舍 ";
  116. a[0][7].information="西门 ";
  117. a[0][8].information="东区 ";
  118. a[0][9].information="体育馆 ";
  119. a[0][10].information=" 五子顶";
  120.  
  121. }
  122.  
  123. //printf("test4.......\n");
  124.  
  125. for(i=0; i<N; i++)
  126. a[0][i].vexnum[i]=i;
  127.  
  128. //printf("test5........\n");
  129. printf(" ");
  130. for(i=0; i<N; i++)
  131. printf("%6c", a[0][i].vex[i]);
  132. printf("\n");
  133. for(i=0; i<N; i++)
  134. {
  135. printf("%5c ", a[0][i].vex[i]);
  136. for(j=0; j<N; j++)
  137. {
  138. if(a[i][j].weight==MAX)
  139. printf(" ∞");
  140. else printf(" %5d", a[i][j].weight);
  141. }
  142. printf("\n");
  143. }
  144.  
  145. printf("\n\n\n||--------------------------------------------------------------||\n\n\n");
  146. printf("|| 以上矩阵对应的边的信息如下: ||\n\n\n");
  147. for(i=0; i<N; i++)
  148. printf("%5c:%s ", a[0][i].vex[i], a[0][i].information);
  149. printf("\n\n\n\n\n");
  150.  
  151. }
  152.  
  153. //-----------2. 任意景点相关信息的查询\n");----------------------------------
  154. void QueryAnyViews()
  155. {
  156. printf("\n\n---------------------------------------------------------\n\n");
  157. printf("*****请输入您要查询的景点序号:A~K (输入形式为大写字母 )******\n\n\n");
  158.  
  159. char choice;
  160. scanf("%c", &choice);
  161.  
  162. printf("||------------------------------------------------------------------||\n");
  163. switch(choice)
  164. {
  165. case 'A':
  166. printf("|| A 为中国海洋大学北区宿舍公寓,主要为理工科同学 ||\n");
  167. break;
  168. case 'B':
  169. printf("|| B 为康惠达超市,里面为同学们提供各种日常所需用品 ||\n");
  170. break;
  171. case 'C':
  172. printf("|| C 为公共教学区的第3 教学区, 主要是同学们上课自习的场所 ||\n");
  173. break;
  174. case 'D':
  175. printf("|| D 为九球广场 周围是紫藤,开后非常 漂亮 ||\n");
  176. break;
  177. case 'E':
  178. printf("|| E 为信息学院 主要是计算机、物理、海科等专业在里面做实验所用 ||\n");
  179. break;
  180. case 'F':
  181. printf("|| F 为图书馆 里面藏书丰富 平常同学们都是满满的 期末考试时爆满 ||\n");
  182. break;
  183. case 'G':
  184. printf("|| G 为南区宿舍 南区主要就是文管类的同学啦 ||\n");
  185. break;
  186. case 'H':
  187. printf("|| H 为西门校门了 也是海大崂山校区的正门了 特别漂亮 ||\n");
  188. break;
  189. case 'I':
  190. printf("|| I 为东区主要部分, 东区可是美食城啊 ||\n");
  191. break;
  192. case 'J':
  193. printf("|| J 为体育馆 同时也是大学生活动多功能厅 ||\n");
  194. break;
  195. case 'K':
  196. printf("|| K 为五子顶 它在夜景下可是一颗心形的,下面是美丽的樱花大道 ||\n");
  197. break;
  198. default:
  199. break;
  200.  
  201. }
  202. printf("||------------------------------------------------------------------||\n");
  203. printf("\n\n\n");
  204. }
  205.  
  206. //---------------3. 任意景点的纹路查询,即查询任意两个景点之间的一条最短的简单路径--------------
  207. //用 Dijkstra算法求原点到所有顶点的最短路径
  208. void SimpleShortestPath()
  209. {
  210. printf("请输入您要查询的任意两个景点的顶点向量:0~10 \n\n\n ");
  211. int u, v;
  212. printf("\n请输入第一个要查询的起点\n");
  213. scanf("%d", &u);
  214. printf("\n请输入第二个要查询的终点\n");
  215. scanf("%d", &v);
  216. MGraph start[N]; //用start[N]数组来存放原点到所有顶点的而最短路径值
  217. //先初始化start[N]数组, 就是 0 号顶点到其余各个顶点的初始路程
  218. int i, j, k, min;
  219. for(i=0; i<N; i++)
  220. start[i].weight=a[0][i].weight;
  221.  
  222. int book[N]; //book数组来记录最短路畅的顶点集合 book[i]为1表示此顶点在最短路径的集合中, 为0则没有
  223. for(i=0; i<N; i++)
  224. book[i]=0; //book数组初始化
  225. book[1]=1;
  226.  
  227. //-----------Dijkstra算法核心语句----------------------------
  228. for(i=0; i<N-1; i++)
  229. {
  230. min=MAX;
  231. //找距离 0 号最近的顶点
  232. for(j=0; j<N; j++)
  233. {
  234. if(book[j]==0 && start[j].weight<min)
  235. {
  236. min=start[j].weight;
  237. u=j;
  238. }
  239. }
  240. book[u]=1;
  241. for(v=0; v<N; v++)
  242. {
  243. if(a[u][v].weight < MAX)
  244. {
  245. if(start[v].weight>start[u].weight + a[u][v].weight)
  246. start[v].weight=start[u].weight+a[u][v].weight;
  247. }
  248. }
  249. }
  250.  
  251. //输出最终结果
  252. for(i=0; i<N; i++)
  253. printf("%5d", start[i].weight);
  254.  
  255. getchar();
  256. getchar();
  257. getchar();
  258.  
  259. }
  260.  
  261. //--------------------------------------------------------------------------
  262. //用 FloydWay算法求原点到所有顶点的最短路径
  263. void FloydWay()
  264. {
  265. //printf("请输入您要查询的任意两个景点的顶点向量:0~10 \n ");
  266. int u, v, w;
  267. //printf("请输入第一个要查询的起点\n");
  268. //scanf("%d", &v);
  269. //printf("请输入第二个要查询的终点\n");
  270. // scanf("%d", &w);
  271. int i;
  272. MGraph g, distance[N][N];
  273. int path[N][N][N];
  274. for(v=0; v<N; v++)
  275. {
  276. for(w=0; w<N; w++)
  277. {
  278. distance[v][w].weight=a[v][w].weight;
  279. for(u=0; u<N; ++u)
  280. {
  281. path[v][w][w]=-1;
  282. if(distance[v][w].weight < MAX)
  283. {
  284. path[v][w][v]=TRUE; //从v 到 w 有直接路径
  285. }
  286. }
  287. }
  288. }
  289. for(u=0; u<N; ++u)
  290. {
  291. for(v=0; v<N; ++v)
  292. {
  293. for(w=0; w<N; ++w)
  294. {
  295. if(distance[v][u].weight+distance[u][w].weight < distance[v][w].weight)
  296. { //从v到w的一条路径更短
  297. distance[v][w].weight=distance[v][u].weight+distance[u][w].weight;
  298. for(i=0; i<N; i++)
  299. path[v][w][i]= path[v][u][i]||path[u][w][i];
  300. }
  301. // printf("%3c ->%3c", distance[v][w].weight, distance[v][w].weight);
  302. }
  303. }
  304. }
  305.  
  306. getchar();
  307. getchar();
  308.  
  309. }
  310.  
  311. void DisPlayWay()
  312. {
  313. printf("请输入您要查询的任意两个景点的顶点向量:0~10 \n ");
  314. int u, v, w;
  315. printf("请输入第一个要查询的起点\n");
  316. scanf("%d", &v);
  317. printf("请输入第二个要查询的终点\n");
  318. scanf("%d", &w);
  319. //printf("%c---->%c 的最短路径: \n", g.vex[v], g.vex[w]);
  320.  
  321. printf("*********%5d------>%5d 的最短路径如下:*************\n\n\n", v, w);
  322. printf("*********%5s------->", a[0][v].information);
  323. printf("%5s***********\n\n\n", a[0][w].information);
  324. MGraph p[N][N];
  325. int i, j, k;
  326. for(i=v; i<N; i++)
  327. {
  328. for(j=w; j<N; j++)
  329. {
  330. if(a[i][j].weight < MAX)
  331. {
  332. p[i][j].weight += a[v][w].weight;
  333. // printf("%d", p[i][j].weight);
  334. }
  335. //else
  336. // printf("%d ---> %d 没有最短路径。。。。。\n");
  337. }
  338. //printf("%5s----->", p[i][j].information);
  339. //printf("%s", p[i][j].information);
  340. printf("%d----->", p[i][j].weight);
  341. }
  342. printf("\n\n\n");
  343. }
  344.  
  345. //---------------------------------主程序界面---------------------------------
  346. int main()
  347. {
  348. printf("******************OUC校园导游*****************\n");
  349. printf("******1.地图如下:******\n\n\n");
  350. printf(" A: 北区宿舍 \n\n\n");
  351. printf(" B:康惠达超市 \n\n");
  352. printf(" J:体育馆 \n\n");
  353. printf("\n\n\n");
  354. printf(" K:五子顶 \n\n");
  355. printf("H:西门 C:3区教学楼 \n\n");
  356. printf(" I:东区 \n\n\n");
  357. printf(" D:九球广场 \n\n");
  358. printf(" E:信息学院 \n\n\n");
  359. printf("\n\n F:图书馆 \n\n\n");
  360. printf("\n\n\n G:南区 \n\n\n");
  361.  
  362. printf("*********请选择要进行的操作**************\n\n\n");
  363. printf(" 1. 首先向您展示OUC的地图O(∩_∩)O~~\n\n\n");
  364. printf(" 2. 任意景点相关信息的查询\n\n\n");
  365. printf(" 3. 任意景点的纹路查询,应Dijkstra方法求即查询任意两个景点之间的一条最短的简单路径--------------\n\n\n");
  366. printf
  367. (" 4. 用Floyd弗洛伊德方法求一对顶点之间的最短路径\n\n\n");
  368. printf(" 0. 退出。。-------------------------------\n\n\n");
  369.  
  370. printf("****请输入1 、 2进行选择(直接输入 0 结束 **********\n\n\n");
  371. int choice;
  372. scanf("%d", &choice);
  373. while(choice!=0)
  374. {
  375. switch(choice)
  376. {
  377. case 1:
  378. printf(" 1. 首先向您展示OUC的地图O(∩_∩)O~~\n\n");
  379. DisPlayMGraph();
  380. break;
  381. case 2:
  382. printf(" 2.现在您会看到ouc景点的简要介绍\n\n");
  383. QueryAnyViews();
  384. break;
  385. case 3:
  386. printf(" 3.从北区宿舍楼到其他各个顶点的最短路径距离\n\n");
  387. SimpleShortestPath();
  388. break;
  389. case 4:
  390. printf("任意两个顶点之间的最短路径\n\n\n");
  391. FloydWay();
  392. DisPlayWay();
  393. break;
  394. default:
  395. break;
  396. }
  397. printf("********请输入1 、 2、 3、 4 进行选择(直接输入 0 结束 **********\n\n\n");
  398. scanf("%d", &choice);
  399. }
  400.  
  401. system("pause");
  402.  
  403. return 0;
  404. }

运行效果如下:

希望大神指正~~~

OUC校园导游的更多相关文章

  1. 校园导游系统(C++实现,VC6.0编译,使用EasyX图形库)

    运行效果: 说明: 由于当年还不会使用多线程,所以很多获取用户点击的地方都是使用循环实现的...CPU占用率会比较高. 代码: //校园导游系统.cpp 1 #include <graphics ...

  2. 校园导游之NABC个人分析

    校园导游之NABC个人分析 Need: 为不熟悉校园环境的人们(如新生,来咱们学校参观滴)提供便利. Approach: 了解Andriod应用开发:导航功能之外还可以对学校进行宣传,比如拍一些学校的 ...

  3. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  4. 開始Unity3D的学习之旅

    前言:这个系列的文章纯属对自己学习的整理,非高手之作.但确实的记载了我作为一个没接触过3D游戏编程的大学生的心路历程.争取每周整理一次吧.之所以会開始学Unity3D,最基本的原因是由于在快放暑假的时 ...

  5. 开始Unity3D参观考察

    前言:这个系列的文章纯属对自己学习的整理,非高手之作. 但确实的记载了我作为一个没接触过3D游戏编程的大学生的心路历程.争取每周整理一次吧. 之所以会開始学Unity3D,最基本的原因是由于在快放暑假 ...

  6. 《NULL-2019团队》第一次作业:OUC二手交易平台

    前言 项目名称:OUC二手交易平台 项目简介:针对在校大学生的二手交易平台,相对于现在市面已有的二手APP,将其使用的普遍性范围缩小,针对在校大学生,这样可以有效的保证交易的真实性和公平性.   NA ...

  7. 首师大附中互测题:LJX的校园:入学典礼【C003】

    [C003]LJX的校园:入学典礼[难度C]—————————————————————————————————————————————————————————————————————————————— ...

  8. 首师大附中科创教育平台 我的刷题记录 3120 LJX的校园:入学典礼

    今天给大家献上"C"级题:LJX的校园:入学典礼!! 试题编号:3120       LJX的校园:入学典礼 难度级别:C: 运行时间限制:45ms: 运行空间限制:256000K ...

  9. LR12.53—使用HP网络导游示例应用程序

    本教程使用 的HP Web之旅,一个样本的基于Web的旅行社系统,向人们展示LoadRunner将如何作为负载测试解决方案.惠普网络旅游用户连接到Web服务器,搜索航班,预订机票,检查飞行路线. 虽然 ...

随机推荐

  1. Windows Iot:让Raspberry Pi跑起来(1)

    首先请大家原谅我的"不务正业",放着RabbitHub不写,各种系列的文章不写搞什么Iot,哈哈,最近心血来潮想搞个速度极快的遥控车玩,望着在角落的Raspberry Pi恶狠狠的 ...

  2. 多兼容的JS获取鼠标坐标

    //第一.相对于屏幕 function getMousePos(event) { var e = event || window.event; return {'x':e.screenX,'y':sc ...

  3. Android drawableleft drawableTop 设置图片的大小

    例子: Drawable drawable=getResources().getDrawable(R.drawable.xx); //获取图片 drawable.setBounds(left, top ...

  4. 泛型-List<T>

    声明一个int类型的泛型对象 List<int> list=new List<int>(); list.Add(44);//不用装箱 int i1=list[0];//也不会发 ...

  5. 五种开源协议(GPL,LGPL,BSD,MIT,Apache)

    什么是许可协议? 什么是许可,当你为你的产品签发许可,你是在出让自己的权利,不过,你仍然拥有版权和专利(如果申请了的话),许可的目的是,向使用你产品的人提供 一定的权限. 不管产品是免费向公众分发,还 ...

  6. js判断浏览器类型以及浏览器版本

    判断浏览器类型:   if navigator.userAgent.indexOf(”MSIE”)>0) {} //判断是否IE浏览器 if(isFirefox=navigator.userAg ...

  7. zookeeper启动后没有相关进程

    查看状态报错,报错,百度硕士nc问题,让看.out文件,但是这哥文件是空的,那就看log 016-12-15 14:08:19,355 [myid:] - INFO [main:QuorumPeer$ ...

  8. 刚开始用git遇到的无法提交变更的问题

    原来我在目录里打开命令行,git bash默认执行的目录是c:/users了,错误的使用了git init,把$HOME 路径下的所有文件载入 git 仓库了,删除$HOME 路径下的".g ...

  9. Java简单示例-用户登录、单个页面的增删改查及简单分页

    index.html  -登录->stulist.jsp (index.html传递到LoginServlet,进行登录检测及写入session,NO返回index.html界面,OK 跳转到s ...

  10. JS之Form表单相关操作

    获取ID组件的值 var userid=document.getElementById('userid').value;var cdkey=document.getElementById('cdkey ...