大二上学期,数据结构老师说要让我们做一个课程设计,记得是从民航管理系统、导航系统、和电话管理系统三个系统里选择其中一个,而我就因为看会了floyd,就决定写写导航系统把,事实并没有非常熟练地掌握,一拖再拖之后到现在也不是太明白,大二第二学期刚考完试,我决定把以前没有掌握的知识再复习一遍。

  话不多说直接上图:

    大二上学期做的不入眼的导航系统。-编程知识网

  对你们没有看错,我就是做了这样一个只有黑框框的程序,实际上他就是没有什么实际价值,因为我将平度(一个县级市)的每个地区抽象成每个点,而现实世界上这个点是一块区域

,根本与现实结合不起来,如果要做一个真正能用的导航系统,估计要用到定位系统吧,这一点也不是太清楚,在这里笔者只跟大家谈论这个算法和这个程序。

 

  没啥说的了直接上程序代码吧

  1 #include<bits/stdc++.h>
  2 #include<windows.h>

3 using namespace std; 4 const int maxN=35,INF=5e5,MAX=30; 5 int G[maxN][maxN]; 6 int path[maxN][maxN]; 7 map<int,string>information,maping; 8 queue<int>way,nearby; 9 void initinformation(){ 10 information[1]="这里是本市的一个特色地区"; 11 information[2]="北接大泽,东邻崮山,最高峰海拔560米。占地面积约10平方公里。"; 12 information[3]="三合山,因由三座东西向连接而又各自独立的山峰组成而得名。"; 13 information[4]="因“孤峰秀峙、高冠霄星、拔地而起、如柱擎天”而得名。"; 14 information[5]="北有廓落崮,背北面南;左有石山,鳌山蜿蜒向前;右有长岭环绕西南,似一颗明珠镶嵌其中。"; 15 information[6]="是国家农业部命名的首家“中国葡萄之乡”。"; 16 information[7]="是近几年刚建的景区,2008年开始投资建成占地300多亩的青岛盛跃农业科技生态园区。"; 17 information[8]="云山境内有名山,曰云山,云山上有古观,曰云山观。"; 18 information[9]="山映水波,秀丽如画;远处烟笼四野,雾漫湖面,为一胜景。"; 19 information[0]="由三座东西向连接而又各自独立的山峰组成而得名。"; 20 } 21 void init(){ 22 printf("\t\t|\t N \t|\t\t\n"); 23 printf("\t\t|\t _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ __ _ _ _ /|\\ \t|\t\t\n"); 24 printf("\t\t|\t _ _ _ _ _ _ _ _ _ _ __ _ __ _ _ _ | \t|\t\t\n"); 25 printf("\t\t|\t /1.新 |-----/3.长乐镇) /4.大泽山镇 /5.大 \\_ _ _ \t|\t\t\n"); 26 printf("\t\t|\t \\ 河镇 |2.灰埠镇/ 13. \\ / 田 \\6.旧店镇\\ \t|\t\t\n"); 27 printf("\t\t|\t \\---------- \\ 店子镇 \\ / 镇 \\------- \t|\t\t\n"); 28 printf("\t\t|\t \\ 14.张舍镇 --------- \\| 10.| ------- | /7.祝沟镇 \t|\t\t\n"); 29 printf("\t\t|\t // -------/------| 12.门村 | | 城 | 9.崔昭 |----------- | \t|\t\t\n"); 30 printf("\t\t|\t \\16.马戈庄镇 / 15.田庄 | 镇 |11.| 关 | 镇 | 8.云山镇 | \t|\t\t\n"); 31 printf("\t\t|\t ------------ 镇 |-----| 李园---| /// / ------------ \t|\t\t\n"); 32 printf("\t\t|\t \\ 17.民村镇 \\ ------- 19. | -----------|21.麻兰镇 / 22. \\ \t|\t\t\n"); 33 printf("\t\t|\t \\ -------- 18.白埠| 同和 |-----| 20.香店 |- - - - - 古岘镇\\ \t|\t\t\n"); 34 printf("\t\t|\t \\ 29.崔 \\ 镇 |-- 30.琴兰镇 |----- 24.张戈庄 | 23.仁\\ \t|\t\t\n"); 35 printf("\t\t|\t \\ 家 \\ / /28.万/----------//--- 25. ----- \\ 兆 \\ \t|\t\t\n"); 36 printf("\t\t|\t \\ 集 \\ 家 / 27. // 26. \\ 郭庄 \\ ------- \t|\t\t\n"); 37 printf("\t\t|\t \\ 镇 \\ 镇 / 蓝底镇 // 南 \\ -------- \t|\t\t\n"); 38 printf("\t\t|\t ------ - ---- - ----// 村 \\ \t|\t\t\n"); 39 printf("\t\t|\t \\ 镇 \\ \t|\t\t\n"); 40 printf("\t\t|\t ---- \t|\t\t\n"); 41 } 42 void floy(){ 43 memset(path,-1,sizeof(path)); 44 for(int k=1;k<=MAX;k++) 45 for(int i=1;i<=MAX;i++) 46 for(int j=1;j<=MAX;j++){ 47 if(G[i][k]+G[k][j]<G[i][j]){ 48 G[i][j]=G[i][k]+G[k][j]; 49 path[i][j]=k; 50 } 51 } 52 } 53 54 void get_way(int s,int e){ 55 if(path[s][e]!=-1){ 56 get_way(s,path[s][e]); 57 get_way(path[s][e],e); 58 } 59 else way.push(e); 60 } 61 void initmapping(){ 62 maping[ 1]="新河镇" ;maping[ 2]="灰埠镇" ;maping[ 3]="长乐镇" ;maping[ 4]="大泽山镇" ; 63 maping[ 5]="旧店镇" ;maping[ 6]="大田镇" ;maping[ 7]="祝沟镇" ; 64 maping[ 8]="云山镇" ;maping[ 9]="崔昭镇" ;maping[ 10]="城关" ;maping[ 11]="李园" ; 65 maping[ 12]="门村镇" ;maping[ 13]="店子镇" ;maping[ 14]="张舍镇" ;maping[ 15]="田庄镇" ; 66 maping[ 16]="马戈庄镇" ;maping[ 17]="民村镇" ;maping[ 18]="白埠镇";maping[ 19]="同和"; 67 maping[ 20]="香店";maping[ 21]="麻兰镇" ;maping[ 22]="古岘镇" ;maping[ 23]="仁兆镇" ; 68 maping[ 24]="张戈庄镇" ;maping[ 25]="郭庄镇" ;maping[ 26]="南村镇" ;maping[ 27]="兰底镇" ; 69 maping[ 28]="万家镇";maping[ 29]="崔家集镇" ;maping[ 30]="琴兰镇" ; 70 } 71 72 void initG() 73 { 74 memset(G,INF,sizeof(G)); 75 for(int i=1;i<=MAX;i++)G[i][i]=0; 76 G[1][2]=G[2][1]=10;G[1][14]=G[14][1]=30;G[2][3]=G[3][2]=15;G[2][13]=G[13][2]=25; 77 G[2][13]=G[13][2]=40;G[3][4]=G[4][3]=5;G[3][13]=G[13][3]=9;G[4][5]=G[5][4]=14; 78 G[4][13]=G[13][4]=8;G[4][9]=G[9][4]=19;G[5][9]=G[9][5]=10;G[5][6]=G[6][5]=8; 79 G[5][7]=G[7][5]=6;G[5][8]=G[8][5]= 16;G[6][7]=G[7][6]= 2;G[7][8]=G[8][7]= 3; 80 G[8][9]=G[9][8]=14;G[8][21]=G[21][8]=14;G[8][22]=G[22][8]=13;G[9][13]=G[13][9]=40; 81 G[9][10]=G[10][9]=6;G[9][20]=G[20][9]=9;G[9][21]=G[21][9]=14;G[10][13]=G[13][10]=21; 82 G[10][11]=G[11][10]=3;G[10][20]=G[20][10]=5;G[11][13]=G[13][11]=10;G[11][12]=G[12][11]=3; 83 G[11][19]=G[19][11]=6;G[11][20]=G[20][11]=10;G[12][13] =G[13][12]=20;G[12][14] =G[14][12]=21; 84 G[12][15]=G[15][12]=8;G[12][18]=G[18][12]=22;G[12][19]=G[19][12]=30;G[13][14]=G[14][13]= 6; 85 G[14][16]=G[16][14]=11;G[14][15]=G[15][14]=7;G[15][16]=G[16][15]=9;G[15][17]=G[17][15]= 10; 86 G[15][18]=G[18][15]=13;G[16][17]=G[17][16]=21;G[17][18]=G[18][17]=31;G[17][29]=G[29][17]= 40; 87 G[18][19]=G[19][18]=11;G[18][29]=G[29][18]=30;G[18][30]=G[30][18]=11;G[19][20]=G[20][19]= 4; 88 G[19][30]=G[30][19]=7;G[20][21]=G[21][20]= 3;G[20][24]=G[24][20]= 9;G[20][30] =G[30][20]=17; 89 G[21][22]=G[22][21]=7;G[21][24]=G[24][21]= 9;G[22][23]=G[23][22]= 18;G[23][24]=G[24][23]= 7; 90 G[23][25]=G[25][23]=4;G[23][26]=G[26][23]= 20;G[24][30]=G[30][24]= 38;G[24][25] =G[25][24]=4; 91 G[24][28]=G[28][24]=36;G[24][27]=G[27][24]=30;G[25][27]=G[27][25]= 14;G[25][26]=G[26][25]= 17; 92 G[26][27]=G[27][26]=7;G[27][28]=G[28][27]= 19;G[28][29]=G[29][28]= 35;G[28][30]=G[30][28]= 14;G[29][30]=G[30][28]=15; 93 } 94 void show(){ 95 system("cls"); 96 printf("\t\t|\t \t|\t\t\n"); 97 printf("\t\t|\t 平度智能导游 :小浩人 \t|\t\t\n"); 98 printf("\t\t|\t \t|\t\t\n"); 99 printf("\t\t|\t 走进平度,不会迷路,小浩人为你服务 \t|\t\t\n"); 100 printf("\t\t|\t \t|\t\t\n"); 101 printf("\t\t|\t 1.地图一览 \t|\t\t\n"); 102 printf("\t\t|\t \t|\t\t\n"); 103 printf("\t\t|\t 2.查询地区信息 \t|\t\t\n"); 104 printf("\t\t|\t \t|\t\t\n"); 105 printf("\t\t|\t 3.智能问路系统 \t|\t\t\n"); 106 printf("\t\t|\t \t|\t\t\n"); 107 printf("\t\t|\t 4.查找附近的地区 \t|\t\t\n"); 108 printf("\t\t|\t \t|\t\t\n"); 109 printf("\t\t|\t 5.退出系统 \t|\t\t\n"); 110 printf("\t\t|\t \t|\t\t\n"); 111 printf("\t\t|\t \t|\t\t\n"); 112 printf("\t\t|\t \t|\t\t\n"); 113 printf("\t\t|请按1~5键进行选择操作\t \t|\t\t\n"); 114 printf("\t\t|\t 本程序最终解释权归随风风衣所有|\n"); 115 } 116 void process(){ 117 for(int i=1;i<=4;i++){ 118 system("cls"); 119 printf("小浩人正在计算"); 120 for(int j=1;j<=4;j++){ 121 Sleep(100); 122 printf("."); 123 } 124 } 125 system("cls"); 126 } 127 void errorhanding(){ 128 printf("输入错误,请重新输入:\n"); 129 } 130 void print(){ 131 char order; 132 system("cls"); 133 printf("\t\t|\t \t|\t\t\n"); 134 printf("\t\t|\t 小浩人辛辛苦苦把地图画在了终端对话框中 \t|\t\t\n"); 135 init(); 136 printf("看不清小浩人画的地图,可以按O(字母)键打开地图图片,看明白了想返回主界面按回车键返回主界面:\n"); 137 order=getchar(); 138 if(order=='O'||order=='o')system("D:\map.jpg"); 139 if(!(order=='O'||order=='o')){ 140 system("cls"); 141 show(); 142 } 143 else{ 144 getchar(); 145 system("cls"); 146 show(); 147 } 148 149 } 150 void init_demand(int num){ 151 152 printf(" \n"); 153 printf("_________________________\n"); 154 printf("| |\n"); 155 cout<<"| "<<num<<maping[num]<<" | "<<information[rand()%10]<<endl; 156 printf("| |\n"); 157 printf("|________________________|\n"); 158 159 } 160 void demand(){ 161 char order; 162 system("cls"); 163 int num; 164 init(); 165 printf("请您输入你要查询地区的标号:\n"); 166 scanf("%d",&num); 167 init_demand(num); 168 printf("是否要继续查询 Y/N:\n"); 169 getchar();//接受num的回车 170 scanf("%c",&order); 171 getchar(); 172 173 if(order=='N'||order=='n'){ 174 show(); 175 return; 176 } 177 else demand(); 178 } 179 void seekpaths(){ 180 int Begin,End; 181 system("cls"); 182 init(); 183 printf("请输入你现在所在的位置的编号:\n"); 184 scanf("%d",&Begin); 185 cout<<"您输入的地点是:"<<maping[Begin]<<endl; 186 printf("请您输入你要去的位置的编号:\n"); 187 scanf("%d",&End); 188 getchar(); 189 cout<<"您输出的终点是:"<<maping[End]<<endl; 190 printf("按回车键,小浩人就要开始算了:\n"); 191 getchar(); 192 process(); 193 printf("\n\n\n"); 194 cout<<" 小浩人 经过详细地计算,您开始的地点是 "<<maping[Begin]<<" 您结束的地点是 " 195 <<maping[End]<<" ,全程一共 "<<G[Begin][End]<<" 公里\n\n\n"; 196 printf("具体路径为:\n\n"); 197 way.push(Begin); 198 get_way(Begin,End); 199 printf("Begin:\n\n"); 200 printf(" "); 201 202 cout<<maping[way.front()]; 203 way.pop(); 204 while(!way.empty()){ 205 cout<<"————>>"<<maping[way.front()]; 206 way.pop(); 207 } 208 printf("\n\n\n"); 209 210 printf("按回车键返回主菜单:\n"); 211 getchar(); 212 system("cls"); 213 show(); 214 } 215 void seeks(){ 216 system("cls"); 217 init(); 218 int order,m; 219 printf("请您输入你所在位置的编号:\n"); 220 scanf("%d",&order); 221 cout<<"您输入的地点是 "<<maping[order]<<"。\n"; 222 printf("请您输入公里数,在这个距离能够到达的地点:\n"); 223 scanf("%d",&m); 224 getchar(); 225 printf("按回车键,小浩人就要开始算了:\n"); 226 getchar(); 227 for(int i=1;i<=30;i++) 228 if(G[order][i]!=0&&G[order][i]<=m)nearby.push(i); 229 process(); 230 printf("\n\n\n"); 231 cout<<"小浩人经过详细地计算,您开始的地点是 "<<maping[order]<<""<<m 232 <<"公里内,能够到达以下地点"<<endl<<endl<<endl; 233 while(!nearby.empty()){ 234 cout<<nearby.front()<<". "<<maping[nearby.front()]<<" 距离:"<<G[order][nearby.front()]<<"公里"<<endl; 235 nearby.pop(); 236 } 237 char order_; 238 printf("是否要继续查询 Y/N:\n"); 239 //接受m的回车 240 scanf("%c",&order_); 241 getchar(); 242 if(order_=='N'||order_=='n'){ 243 show(); 244 return; 245 } 246 else seeks(); 247 } 248 void exits(){ 249 printf("期待与你下次相见 bey bey~"); 250 printf("\n\t\t\t\t (按回车键确认退出)\n"); 251 getchar(); 252 exit(0); 253 } 254 void changecolor(){ 255 Sleep(100); 256 system("color 0B"); 257 Sleep(100); 258 system("color 01"); 259 Sleep(100); 260 system("color 0C"); 261 Sleep(100); 262 system("color 03"); 263 Sleep(100); 264 system("color 06"); 265 Sleep(100); 266 system("color 02"); 267 Sleep(100); 268 system("color 0F"); 269 } 270 int main(){ 271 //system("mode con cols=120 lines=30"); 272 show(); 273 initG(); 274 floy(); 275 initmapping();//初始对应信息(城市编号) 276 initinformation();//初始化城市信息 277 changecolor(); 278 char order; 279 while(scanf("%c",&order)==1){ 280 getchar(); 281 switch (order) 282 { 283 case '1':print();break; 284 case '2':demand();break;//查询地点信息 285 case '3':seekpaths();break; 286 case '4':seeks();break;//查询给定距离的地点 287 case '5':exits();break; 288 default:errorhanding(); 289 } 290 } 291 process(); 292 return 0; 293 }

 

 

转载于:https://www.cnblogs.com/suifengfengyi/p/11137177.html