以下是代码(本可以更简洁(119行代码),然而。。。。。。):

只用到迪杰斯特拉算法和记录路径

#include <bits/stdc++.h>
#include <conio.h>
#include <stdlib.h> 
#include <windows.h>
using namespace std;
#define INF 0x3f3f3f3f
int Map[1500][1500];
int dis[2200],vis[2200];
int pre[2200];
map<int , string >V;
int t,n,a,b,c,s,e;
void init()
{
	int a , b , c ;
	char ch[4]; 
	string str;
	memset(pre , -1 , sizeof(pre));
	memset(Map , INF , sizeof(Map)); 
	V[1] = "大北门 ";
	V[2] = "齐贤广场"; 
	V[3] = "书香园 ";
	V[4] =  "15教 ";
	V[5] = "图书馆 "; 
	V[6] = "体育馆 ";
	V[7] = "汇森楼 "; 
	V[8] = "食堂  ";
	V[9] = "菜鸟驿站";
	V[10] = "青年公寓"; 
	Map[1][2] = Map[2][1] = 3;
	Map[1][3] = Map[3][1] = 2;
	Map[2][3] = Map[3][2] = 5;
	Map[3][4] = Map[4][3] = 6;
	Map[3][6] = Map[6][3] = 3;
	Map[4][5] = Map[5][4] = 7;
	Map[5][6] = Map[6][5] = 1;
	Map[4][7] = Map[7][4] = 11;
	Map[1][8] = Map[8][1] = 5;
	Map[5][9] = Map[9][5] = 12;
	Map[6][10] = Map[10][6] = 4;
	Map[8][10] = Map[10][8] = 9;
}
void dijkstra(int s)
{
	n=10; 
	for(int i=1;i<=n;i++)
	{
		dis[i] = Map[s][i];
		vis[i] = 0;
		pre[i] = -1;
	}
	vis[s] = 1; 
	int min=INF,u;
	for(int i=1;i<=n;i++)
	{
		min=INF;
		for(int j=1;j<=n;j++)
		{
			if(!vis[j]&&dis[j]<min)
			{
				min=dis[j];
				u=j;
			}
		}
		vis[u]=1;
		for(int v=1;v<=n;v++)
		{
			if(!vis[v]&&dis[v]>dis[u]+Map[u][v])
			{
				dis[v]=dis[u]+Map[u][v];
				pre[v] = u;
			}
		}
	}
}
void print(int v)
{
	if(pre[v] == -1)
	{
	cout<< V[v];
		return ;
	}
	print(pre[v]);
cout <<"--->"<<V[v];
}
void showsig()
{
	system("cls");
	puts("\n\n\n\n\n");
	printf("\t\t\t\t          ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~     \n");
	printf("\t\t\t\t                欢迎进入 校园导航         \n");													
	printf("\t\t\t\t          ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~     \n");
	puts("\n\n\n\t\t\t\t\t-------------------------------");
	for(int i = 1 ; i <= 10 ; i++)
	{
		cout<<"\t\t\t\t\t~~~~~~~~~~~"<<i<<"."<<V[i]<<"~~~~~~~~~~~~"<<endl;;
	}
	puts("\t\t\t\t\t-------------------------------");
}
void sig()
{
	puts("\n\n\n\n\n");
	printf("\t\t\t\t          ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~    \n");
	printf("\t\t\t\t                欢迎进入 校园导航        \n");													
	printf("\t\t\t\t          ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~    \n");
	puts("\n\n\n\t\t\t\t-------------------------------");
	showsig();
	int a;
	puts("\n\n\n\t\t\t\t输入要查询的景点信息(按'0'退出)");
	while(cin>>a)
	{
		if(a == 0) break;
		if(a == 1) cout<<V[1]<<"南阳理工学院的大门庄严肃重"<<endl;
		if(a == 2) cout<<V[2]<<"经常有活动,演出的地方~"<<endl; 
		if(a == 3) cout<<V[3]<<"学生们早上经常来这里晨读,背诵~"<<endl; 
		if(a == 4) cout<<V[4]<<"软件学院学生们的主要教学楼"<<endl;
		if(a == 5) cout<<V[5]<<"考研大军,爱学习的学生们常常聚集的地方~"<<endl;
		if(a == 6) cout<<V[6]<<"喜爱运动的学生们常常来此打篮球,羽毛球等等~"<<endl;
		if(a == 7) cout<<V[7]<<"有梦想的大学生来此创业"<<endl;
		if(a == 8) cout<<V[8]<<"学校的食堂,物美价廉~"<<endl;
		if(a == 9) cout<<V[9]<<"网购,寄包裹的地方"<<endl;
		if(a == 10) cout<<V[10]<<"条件超棒的学生住宿楼"<<endl;   
		
	}
}
int show()
{
	system("color 70");
	puts("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\t\t____________________校园导航\n");
		puts("\t\t\t\t\t\t\t\t\t\t\t\t_____design by:曹雨菲");
}
int show1()
{
		
		system("PAUSE");
		system("cls"); 
			puts("\n\n\n\n\n");
			printf("\t\t\t\t          ——————————————————————————————\n");
			printf("\t\t\t\t         |                    欢迎进入 校园导航                      |\n");													
			printf("\t\t\t\t         |~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~|\n");
			printf("\t\t\t\t         |                          	                             |\n");
			printf("\t\t\t\t         | 	 	1- 南阳理工学院各景点名称及景点信息          |\n");
			printf("\t\t\t\t         |                                                           |\n");
			printf("\t\t\t\t         |              2 - 最短路径及距离查询                       |\n");
			printf("\t\t\t\t         |                     	                                     |\n");
			printf("\t\t\t\t         |              3-退出                                       |\n");
			printf("\t\t\t\t         |                                                           |\n");
			printf("\t\t\t\t         |                                                           |\n");
			printf("\t\t\t\t         ——————————————————————————————|\n");
		
}
void disshow()
{
		system("cls");
		puts("\n\n\n\n\n");
		printf("\t\t\t\t         ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~          \n");
		printf("\t\t\t\t                 欢迎进入 校园导航                    \n");													
		printf("\t\t\t\t         ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~          \n");
		printf("\t\t\t\t        |          1- 定向导航             |          \n");
		printf("\t\t\t\t        |                                  |          \n");
		printf("\t\t\t\t        |          2-不定向导航            |          \n");
		printf("\t\t\t\t        |                                  |          \n");
		printf("\t\t\t\t        |          3-退出                  |          \n");
		printf("\t\t\t\t        |                                  |          \n");
		int a,b,c;
		puts("\t\t\t\t");
		while(cin>>a)
		{
			if(a == 1)
			{
				
				showsig();
				printf("\t\t\t\t         请输入你现在所在的地点");cin>>b;
				printf("\t\t\t\t         请输入你现在要去的地点");cin>>c;
				dijkstra(b);
				cout<<"\t\t\t\t"<<"从"<<V[b]<<"到"<<V[c]<<"的最短距离是:"<<dis[c]<<endl;
				printf("\t\t\t\t路径如下:\n"); 
				printf("\t\t\t\t"); 
				cout<<V[b]<<"---->";
				print(c);	
			}
			if(a == 2)
			{
				showsig();
				printf("\t\t\t\t         请输入你现在的地点");cin>>b;
				dijkstra(b);
				for(int i = 1 ; i <= 10 ; i++)
				{
					if(i == b) continue;
					cout<<"\t\t\t\t从"<<V[b]<<"到"<<V[i]<<"的最短距离是"<<dis[i]<<endl;
				}
			}
			if(a == 3) break;
			printf("\n"); 
			system("PAUSE");
			system("cls");
		printf("\t\t\t\t         ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~          \n");
		printf("\t\t\t\t                 欢迎进入 校园导航                    \n");													
		printf("\t\t\t\t         ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~          \n");
		printf("\t\t\t\t        |          1- 定向导航             |          \n");
		printf("\t\t\t\t        |                                  |          \n");
		printf("\t\t\t\t        |          2-不定向导航            |          \n");
		printf("\t\t\t\t        |                                  |          \n");
		printf("\t\t\t\t        |          3-退出                  |          \n");
		printf("\t\t\t\t        |                                  |          \n");
		puts("\t\t\t\t");
		}
		
}

void p()
{
	show();
	show1();
	int a;
	printf("\t\t\t\t");
	printf("请输入查询选项:"); 
	while(cin>>a)
	{
		if(a == 1) sig();
		if(a == 2) disshow();
		if(a == 3) break;
		puts("\t\t\t\t");
		show1(); 
	}	 	
}
int main()
{
	init();
	p();
	return 0;
}