最终稿.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. #include<bits/stdc++.h>/** 注:步行速度为90m/min **/
  2. #include "stdio.h"
  3. #include "string.h"
  4. #include "windows.h"
  5. #define INFINITY 99999 ///无穷大,即不相邻
  6. #define MAX_VERTEX_NUM 20 ///最大的顶点个数
  7. using namespace std;
  8. typedef int VRType;
  9. typedef char InfoType;
  10. typedef struct
  11. {
  12. int num;
  13. char name[20];
  14. char introduce[100];
  15. } VertexType;
  16. typedef struct ArcCell
  17. {
  18. VRType adj; ///距离
  19. InfoType *info;///边的信息
  20. } ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
  21. typedef struct
  22. {
  23. VertexType vex[MAX_VERTEX_NUM];///顶点向量
  24. AdjMatrix arcs; ///邻接矩阵#include<conio.h>
  25. int vexnum,arcnum; ///顶点数和边数
  26. } MGraph;
  27. VertexType site[11]=
  28. {
  29. {1,"生活区"," 一大群孩子的老巢"},
  30. {2,"球场"," 锻炼身体、休闲娱乐的地方"},
  31. {3,"风雨操场","情侣们秀恩爱的最佳去处"},
  32. {4,"众创空间","集合广播台等高大尚的工作的地方"},
  33. {5,"学苑超市","一个坑钱的地方,thing贼贵"},
  34. {6,"浴室"," 让你出淤泥而不染的地方"},
  35. {7,"知味园"," 小而拥挤、人流量te多还难吃的就餐地方"},
  36. {8,"致知楼"," 结合上课和办公与一体的高端教学楼"},
  37. {9,"敏行楼"," 夏天不热、冬天不冷的实验楼,也是报告厅所在地"},
  38. {10,"图书馆"," 还在建设中,想进去都进不去"},
  39. {11,"学校南门","学校正门,学校的门面,然而基本没开过"}
  40. };
  41. /*****************************************************************************************************************/
  42. /*****************************************************************************************************************/
  43. /******* *******/
  44. /******/ void schoolmap();///学校地图 /******/
  45. /******* *******/
  46. /******/ void menu();///菜单 /******/
  47. /******* *******/
  48. /******/ void create(MGraph &g,VertexType site[]);///创建邻接矩阵 /******/
  49. /******* *******/
  50. /******/ void output(MGraph g,int i);///根据序号i输出对应的地点的相关信息 /******/
  51. /******* *******/
  52. /******/ void search(MGraph g);///查找某个地点信息 /******/
  53. /******* *******/
  54. /******/ void Shortest_Path_Dijkstra(MGraph g,int v0,int P[][20],int D[20]);///Dijkstra算法 /******/
  55. /******* *******/
  56. /******/ void ShortestPath_FLOYD(MGraph g, int P[20][20][20], int D[][20]);///FLOYD算法 /******/
  57. /******* *******/
  58. /******/ void add_arc(MGraph &g);///增加修改地点间路径 /******/
  59. /******* *******/
  60. /******/ void delete_arc(MGraph &g);///删除某一条边 /******/
  61. /******* *******/
  62. /******/ void display_num(MGraph g);///显示所有地点序号名称 /******/
  63. /******* *******/
  64. /******/ void display_all(MGraph g);///输出具体信息 /******/
  65. /******* *******/
  66. /******/ void update(MGraph &g);///修改某一个地点信息 /******/
  67. /******* *******/
  68. /*******/ void load(MGraph &g);///map *******/
  69. /*****************************************************************************************************************/
  70. /*****************************************************************************************************************/
  71. char reg_name[30]="",reg_pwd[10]="";
  72. char on_name[30],on_pwd[10];
  73. //用户注册系统
  74. void regist()
  75. {
  76. //system("pause");//清屏
  77. //system("cls");
  78. printf("\n\n\t\t\t欢迎使用安科地图导航注册系统\n\n");
  79. while(1)
  80. {
  81. //输入用户名
  82. printf("\t\t请输入用户名:");
  83. scanf("%s",reg_name);
  84. //判断用户名
  85. if(strlen(reg_name))
  86. {
  87. while(1)
  88. {
  89. //输入密码
  90. printf("\n\t\t请输入密码:");
  91. scanf("%s",reg_pwd);
  92. //判断密码
  93. if(strlen(reg_pwd))
  94. {
  95. printf("\n\n\t\t注册成功,您的用户名是%s,密码是%s\n\n",reg_name,reg_pwd);
  96. break;
  97. }
  98. else
  99. {
  100. printf("\n\t\t密码的长度为%d,请重新输入\n",strlen(reg_pwd));
  101. }
  102. }
  103. break;
  104. }
  105. else
  106. {
  107. printf("\n\t\t用户名的长度为%d,请重新输入\n\n",strlen(reg_name));
  108. }
  109. }
  110. }
  111. //判断是否注册
  112. int judge()
  113. {
  114. //system("pause");//清屏
  115. //system("cls");
  116. if(strcmp(reg_name,"")==0&&strcmp(reg_pwd,"")==0)
  117. {
  118. printf("\n\n\t\t您尚未注册,请先注册!\n\n");
  119. return 0;
  120. }
  121. else
  122. {
  123. return 1;
  124. }
  125. }
  126. //用户登录
  127. void dl()
  128. {
  129. int i;
  130. printf("\n\n\t\t\t欢迎使用安科地图导航登录系统\n\n");
  131. //三次登录验证
  132. for(i=1; i<=3; i++)
  133. {
  134. printf("\t\t请输入用户名:");
  135. scanf("%s",on_name);
  136. printf("\n\t\t请输入密 码:");
  137. scanf("%s",on_pwd);
  138. if(strcmp(reg_name,on_name)==0&&strcmp(reg_pwd,on_pwd)==0)
  139. {
  140. printf("\n\n\t\t登录成功,欢迎使用安科地图导航系统\n\n");
  141. break;
  142. }
  143. else
  144. {
  145. printf("\n\n\t\t登录失败,请重新登录\n\n");
  146. return dl();
  147. }
  148. }
  149. }
  150. int main()
  151. {
  152. int v1,v2,P1[20][20],P2[20][20][20],D1[20],D2[20][20],i,j,k;
  153. MGraph g;
  154. create(g,site);
  155. int id;
  156. while(1)
  157. {
  158. //输出界面
  159. printf("\n\n\t\t\t安科地图导航管理系统\n\n");
  160. printf("\t\t\t1:注册\n");
  161. printf("\t\t\t2:登录\n");
  162. printf("\t\t\t0:退出\n\n");
  163. //输入功能编号
  164. printf("\t\t请选择功能编号:");
  165. scanf("%d",&id);
  166. //判断
  167. switch(id)
  168. {
  169. case 1:
  170. regist();
  171. break;
  172. case 2:
  173. if(judge()==1)
  174. {
  175. dl();
  176. goto LL1;
  177. }
  178. break;
  179. case 0:
  180. printf("下次再来玩呦,嘤嘤嘤^_^!\n");
  181. exit(1);
  182. break;
  183. default:
  184. printf("\n\t\t您输入的功能编号有误,请重新输入!\n");
  185. }
  186. }
  187. LL1:
  188. menu();
  189. printf("please intput your choose:");
  190. scanf("%d",&i);
  191. switch(i)
  192. {
  193. case 0:
  194. schoolmap();
  195. goto LL1;
  196. break;
  197. case 1:
  198. display_num(g);
  199. goto LL1;
  200. break;
  201. case 2:
  202. display_all(g); for(int xx=0;xx<g.vexnum;xx++){
  203. for(int yy=0;yy<g.vexnum;yy++)
  204. printf("%7d",g.arcs[xx][yy]);
  205. printf("\n");
  206. }
  207. goto LL1;
  208. break;
  209. case 3:
  210. search(g);
  211. goto LL1;
  212. break;
  213. case 4:
  214. T: printf("请输入地点的序号:\n");
  215. scanf("%d",&k);
  216. if(k<1||k>11) {printf("不存在该地点!");goto T;}
  217. Shortest_Path_Dijkstra(g,k-1,P1,D1);
  218. for(i=1; i<g.vexnum; i++)
  219. {
  220. printf("%d号(%s)到%d号(%s):",k,g.vex[k-1].name,i+1,g.vex[i].name);
  221. for(j=0; P1[i][j]!=-1; j++)
  222. printf("%d号(%s) ",P1[i][j]+1,g.vex[P1[i][j]].name);
  223. printf("\n距离为:%d\n",D1[i]);
  224. puts("");
  225. }
  226. goto LL1;
  227. break;
  228. case 6:
  229. ShortestPath_FLOYD(g,P2,D2);
  230. for(i=0; i<g.vexnum; i++)
  231. {
  232. for(int j=0; j<g.vexnum; j++)
  233. {
  234. if(i!=j)
  235. {
  236. if(D2[i][j]!=INFINITY)
  237. {
  238. cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"的最短时间为:"<<setw(5)<<D2[i][j]/90<<"min"<<", 最短路径为:";
  239. for(int k=0; k<g.vexnum; k++)
  240. {
  241. if(P2[i][j][k]!=-1)
  242. cout<<g.vex[P2[i][j][k]].name<<" ";
  243. else
  244. break;
  245. }
  246. puts("");
  247. }
  248. else
  249. cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"不可达"<<endl;
  250. }
  251. }
  252. puts("");
  253. }
  254. goto LL1;
  255. break;
  256. case 5:
  257. ShortestPath_FLOYD(g,P2,D2);
  258. for(i=0; i<g.vexnum; i++)
  259. {
  260. for(int j=0; j<g.vexnum; j++)
  261. {
  262. if(i!=j)
  263. {
  264. if(D2[i][j]!=INFINITY)
  265. {
  266. cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"的最短长度为:"<<setw(5)<<D2[i][j]<<", 最短路径为:";
  267. for(int k=0; k<g.vexnum; k++)
  268. {
  269. if(P2[i][j][k]!=-1)
  270. cout<<g.vex[P2[i][j][k]].name<<" ";
  271. else
  272. break;
  273. }
  274. puts("");
  275. }
  276. else
  277. cout<<g.vex[i].name<<"到"<<g.vex[j].name<<"不可达"<<endl;
  278. }
  279. }
  280. puts("");
  281. }
  282. goto LL1; for(int xx=0;xx<g.vexnum;xx++){
  283. for(int yy=0;yy<g.vexnum;yy++)
  284. printf("%7d",g.arcs[xx][yy]);
  285. printf("\n");
  286. }
  287. break;
  288. case 7:
  289. add_arc(g);
  290. goto LL1;
  291. break;
  292. case 8:
  293. delete_arc(g);
  294. goto LL1;
  295. break;
  296. case 9:
  297. update(g);
  298. goto LL1;
  299. break;
  300. case 11:
  301. printf("下次再来玩呦,嘤嘤嘤^_^!\n");
  302. exit(0);
  303. break;
  304. case 10:
  305. load(g);
  306. goto LL1;
  307. break;
  308. default:
  309. printf("你的输入有误,请重新输入!嘤嘤嘤qwq\n");
  310. goto LL1;
  311. break;
  312. }
  313. return 0;
  314. }
  315. void menu()
  316. {
  317. printf("************************************************************\n");
  318. printf("************************************************************\n");
  319. printf("*** 0.大安科全景地图 ***\n");
  320. printf("*** 1.显示所有地点的序号 ***\n");
  321. printf("*** 2.查询所有地点的信息 ***\n");
  322. printf("*** 3.查询某个地点的具体信息 ***\n");
  323. printf("*** 4.查询某个地点到其他地点的最短路径 ***\n");
  324. printf("*** 5.输出任意两个地点之间的最短路径 ***\n");
  325. printf("*** 6.输出任意两个地点之间的最短时间 ***\n");
  326. printf("*** 7.增加某一条边 ***\n");
  327. printf("*** 8.删除某一条边 ***\n");
  328. printf("*** 9.修改某个地点的具体信息 ***\n");
  329. printf("*** 10.查看现在路径情况 ***\n");
  330. printf("*** 11.退出系统 ***\n");
  331. printf("************************************************************\n");
  332. printf("************************************************************\n");
  333. }
  334. void schoolmap()
  335. {
  336. printf(" 安科平面图 \n");
  337. printf(" *----------------------------------------------------------------------------*\n");
  338. printf(" | |西门| |\n");
  339. printf(" |----------------------------------------------------------------------------|\n");
  340. printf(" | *----------------* *-----------------* *--------------------------------* |\n");
  341. printf(" | | | | | | 生活区 (1) | |\n");
  342. printf(" | | 风 雨 | | | | *----* *----* *----* *----* | |\n");
  343. printf(" | | | | | | | 德 | | 德 | | 德 | | 德 | | |\n");
  344. printf(" | | 操 场 | | 球场 (2) | | | 馨 | | 馨 | | 馨 | | 馨 | | |\n");
  345. printf(" | | | | | | | 苑 | | 苑 | | 苑 | | 苑 | | |\n");
  346. printf(" | | (3) | | | | | 1 | | 2 | | 3 | | 4 | | |\n");
  347. printf(" | | | | | | *----* *----* *----* *----* | |\n");
  348. printf(" | *----------------* *-----------------* *--------------------------------* |\n");
  349. printf(" | *-----------------------* *----------* |\n");
  350. printf(" | | 间 | 市 | 室 | | *------* | |\n");
  351. printf(" | | 空 | 超 | | | | B | | |\n");
  352. printf(" | | 创 | 苑 | | | | 园 | | |\n");
  353. printf(" | | 众 | 学 | 浴 | | | | | |\n");
  354. printf(" | | (4)| (5) |(6)| | | 味 | | |\n");
  355. printf(" | *-----------------------* | | | | |\n");
  356. printf(" | *---------* | 知 | | |\n");
  357. printf(" | | *--------* | | |\n");
  358. printf(" | | | | | |\n");
  359. printf(" | | | 知味园A | | |\n");
  360. printf(" | *-----------------------------------* | | | | |\n");
  361. printf(" | | *--------* *--------* *-------* | | *---------------* | |\n");
  362. printf(" | | | | | | | | | | (7) | |\n");
  363. printf(" | | | A | | B | | C | | *--------------------* |\n");
  364. printf(" | | | 楼 | | 楼 | | 楼 | | |\n");
  365. printf(" | | | 知 | | 知 | | 知 | | |\n");
  366. printf(" | | | 致 | | 致 | | 致 | | |\n");
  367. printf(" | | | | | | | | | |\n");
  368. printf(" | | *--------* *--------* *-------* | |\n");
  369. printf(" |-----* | (8) | *----------* |\n");
  370. printf(" | 门 | *-----------------------------------* | | |\n");
  371. printf(" | (11)| | 馆 | |\n");
  372. printf(" | | | 书 | |\n");
  373. printf(" | 南 | | 图 | |\n");
  374. printf(" |-----* *-------------------------------------* | (10) | |\n");
  375. printf(" | | (9) | *----------* |\n");
  376. printf(" | | *--------* *--------* *-------* | |\n");
  377. printf(" | | | | | | | | | |\n");
  378. printf(" | | | A | | B | | C | | |\n");
  379. printf(" | | | 楼 | | 楼 | | 楼 | | |\n");
  380. printf(" | | | 行 | | 行 | | 行 | | |\n");
  381. printf(" | | | 敏 | | 敏 | | 敏 | | |\n");
  382. printf(" | | | | | | | | | |\n");
  383. printf(" | | *--------* *--------* *-------* | | 东 门 | |\n");
  384. printf(" *-------*-------------------------------------*-------*-----------*----------*\n");
  385. printf("\n");
  386. }
  387. void create(MGraph &g,VertexType site[])
  388. {
  389. int i,j;
  390. g.vexnum=11;
  391. g.arcnum=12;
  392. for(i=0; i<11; i++)
  393. g.vex[i]=site[i];
  394. for(i=0; i<g.vexnum; i++)
  395. for(j=0; j<g.vexnum; j++)
  396. g.arcs[i][j]= {INFINITY,NULL};
  397. g.arcs[0][1].adj=150;
  398. g.arcs[1][2].adj=100;
  399. g.arcs[2][3].adj=141;
  400. g.arcs[3][4].adj=30;
  401. g.arcs[4][5].adj=30;
  402. g.arcs[5][9].adj=300;for(int xx=0;xx<g.vexnum;xx++)
  403. g.arcs[5][10].adj=410;
  404. g.arcs[6][7].adj=210;
  405. g.arcs[6][9].adj=180;
  406. g.arcs[0][4].adj=160;
  407. g.arcs[0][7].adj=400;
  408. g.arcs[9][10].adj=310;
  409. g.arcs[7][8].adj=190;
  410. for(i=0; i<g.vexnum; i++)
  411. for(j=0; j<g.vexnum; j++)
  412. g.arcs[j][i].adj= g.arcs[i][j].adj;
  413. }
  414. void output(MGraph g,int i)///输出地点信息
  415. {
  416. printf("地点序号:%d\n",i);
  417. printf("地点名称:%s\n",g.vex[i-1].name);
  418. printf("地点简介:%s\n",g.vex[i-1].introduce);
  419. }
  420. void search(MGraph g)///查找某个地点信息
  421. {
  422. int i;
  423. printf("请输入你想查找地点的序号:");
  424. scanf("%d",&i);
  425. if(i<1||i>11)
  426. {printf("请重新输入!\n"); search(g);}
  427. else if(i<12)
  428. {output(g,i);}
  429. }
  430. void Shortest_Path_Dijkstra(MGraph g,int v0,int P[][20],int D[20])///最短路径算法
  431. {
  432. int v,w,i,j,final[20],min;
  433. for(v=0; v<g.vexnum; v++)
  434. {
  435. final[v]=0;
  436. D[v]=g.arcs[v0][v].adj;
  437. for(w=0; w<g.vexnum; w++)
  438. P[v][w]=-1;
  439. if(D[v]<INFINITY)
  440. {
  441. P[v][0]=v0;
  442. P[v][1]=v;
  443. }
  444. }
  445. D[v0]=0;
  446. final[v0]=1;
  447. for(i=1; i<g.vexnum; i++)
  448. {
  449. min=INFINITY;
  450. for(w=0; w<g.vexnum; w++)
  451. if(!final[w]&&D[w]<min)
  452. {
  453. v=w;
  454. min=D[w];
  455. }
  456. final[v]=1;
  457. for(w=0; w<g.vexnum; w++)
  458. if(!final[w]&&(min+g.arcs[v][w].adj<D[w]))
  459. {
  460. D[w]=min+g.arcs[v][w].adj;
  461. for(j=0; j<g.vexnum; j++)
  462. {
  463. P[w][j]=P[v][j];
  464. if(P[w][j]==-1)///在p[w][]第一个等于-1的地方加上顶点w
  465. {
  466. P[w][j]=w;
  467. break;
  468. }
  469. }
  470. }
  471. }
  472. }
  473. void ShortestPath_FLOYD(MGraph g, int P[20][20][20], int D[][20])///最短路径算法
  474. {
  475. int u,v,w,i,j;
  476. for(v=0; v<g.vexnum; v++)
  477. for(w=0; w<g.vexnum; w++)
  478. {
  479. D[v][w]=g.arcs[v][w].adj;
  480. for(u=0; u<g.vexnum; u++)
  481. P[v][w][u]=-1;
  482. if(D[v][w]<INFINITY)
  483. {
  484. P[v][w][0]=v;
  485. P[v][w][1]=w;
  486. }
  487. }
  488. for(u=0; u<g.vexnum; u++)
  489. for(v=0; v<g.vexnum; v++)
  490. for(w=0; w<g.vexnum; w++)
  491. if(D[v][u]<INFINITY&&D[u][w]<INFINITY&&D[v][u]+D[u][w]<D[v][w])
  492. {
  493. ///更新D
  494. D[v][w]=D[v][u]+D[u][w];
  495. ///更新p,从v到w的路径是从v到u,再从u到w的所有路径
  496. for(i=0; i<g.vexnum; i++)
  497. {
  498. if(P[v][u][i]!=-1)
  499. P[v][w][i]=P[v][u][i];
  500. else
  501. break;
  502. }
  503. for(j=1; j<g.vexnum; j++) ///注意:这里j从1开始而不是从0开始,因为从v到u的路径最后一个顶点是u, 而从u到w的路径第一个顶点是u,只需打印u一次即可。
  504. {
  505. if(P[u][w][j]!=-1)
  506. P[v][w][i++]=P[u][w][j];
  507. else
  508. break;
  509. }
  510. }
  511. }
  512. void update(MGraph &g)///修改某个具体信息
  513. {
  514. int i;
  515. printf("请输入你想查找的地点的序号:");
  516. scanf("%d",&i);
  517. if(i>=1&&i<=11)
  518. {
  519. printf("请输入新的地点名称:");
  520. scanf("%s",g.vex[i-1].name);
  521. printf("请输入新的地点名称简介:");
  522. scanf("%s",g.vex[i-1].introduce);
  523. }
  524. else printf("没有找到这个地方嘤嘤嘤qwq~\n");
  525. }
  526. void load(MGraph &g)
  527. {
  528. printf("现各地点间的距离:\n");
  529. printf(" MAP (01) (02) (03) (04) (05) (06) (07) (08) (09) (10) (11)\n");
  530. for(int xx=0;xx<g.vexnum;xx++){
  531. printf("(%02d) ",xx+1);
  532. for(int yy=0;yy<g.vexnum;yy++)
  533. if(g.arcs[xx][yy].adj==99999) printf(" ----");
  534. else
  535. printf("%6d",g.arcs[xx][yy].adj);
  536. printf("\n");
  537. }
  538. printf("\n");
  539. }
  540. void add_arc(MGraph &g)///增加某一条边
  541. {
  542. int v1,v2,n;
  543. printf("请输入你想增加的边两端的顶点序号:");
  544. printf("请输入第一个顶点号:");
  545. scanf("%d",&v1);
  546. printf("请输入第二个顶点号:");
  547. scanf("%d",&v2);
  548. if(g.arcs[v1-1][v2-1].adj==INFINITY)
  549. {
  550. printf("请输入两点之间的距离:");
  551. scanf("%d",&g.arcs[v1-1][v2-1].adj);
  552. g.arcs[v2-1][v1-1].adj=g.arcs[v1-1][v2-1].adj;
  553. printf("增加成功!嘤嘤嘤^_^\n");
  554. }
  555. else
  556. {
  557. LL0:
  558. printf("这两点已经有路径存在了,你想要修改它吗?想的话请按1,不想请按2:\n");
  559. scanf("%d",&n);
  560. if(n==1)
  561. {
  562. printf("请输入两点之间的新的距离:");
  563. scanf("%d",&g.arcs[v1-1][v2-1].adj);
  564. g.arcs[v2-1][v1-1].adj=g.arcs[v1-1][v2-1].adj;
  565. printf("修改成功!嘤嘤嘤^-^\n");
  566. }
  567. else if(n==2)
  568. {
  569. printf("增加失败,嘤嘤嘤T_T\n");
  570. }
  571. else
  572. {
  573. printf("你的输入有误,请重新输入!嘤嘤嘤qwq\n");
  574. goto LL0;
  575. }
  576. }
  577. load(g);
  578. }
  579. void delete_arc(MGraph &g)///删除某一条边
  580. {
  581. int v1,v2;
  582. printf("请输入你想删除的边两端的顶点序号:\n");
  583. printf("请输入第一个顶点号:\n");
  584. scanf("%d",&v1);
  585. printf("请输入第二个顶点号:\n");
  586. scanf("%d",&v2);
  587. if(g.arcs[v1-1][v2-1].adj!=INFINITY)
  588. {
  589. g.arcs[v1-1][v2-1].adj=g.arcs[v2-1][v1-1].adj=INFINITY;
  590. printf("删除成功!嘤嘤嘤^_^\n");
  591. }
  592. else
  593. printf("删除失败!这两个点之间本来就没有直接通路,你还删它干嘛?!嘤嘤嘤qwq\n");
  594. }
  595. void display_num(MGraph g)///输出所有地点序号名称
  596. {
  597. int i;
  598. printf("<地点序号> <地点名称>\n");
  599. for(i=0; i<g.vexnum; i++)
  600. printf("%5d %s\n",g.vex[i].num,g.vex[i].name);
  601. }
  602. void display_all(MGraph g)///输出具体信息
  603. {
  604. int i;
  605. printf("<地点序号> <地点名称> <地点简介>\n");
  606. for(i=0; i<g.vexnum; i++)
  607. {
  608. printf("%5d %s %s\n",g.vex[i].num,g.vex[i].name,g.vex[i].introduce);
  609. }
  610. }