校园导航课程设计


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

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

#include 
#include 
#include  
#include 
using namespace std;
#define INF 0x3f3f3f3f
int Map[1500][1500];
int dis[2200],vis[2200];
int pre[2200];
mapV;
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]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 <<"--->"<>a)
	{
		if(a == 0) break;
		if(a == 1) cout<>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"<<"从"<";
				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从"<>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;
}

你可能感兴趣的:(校园导航课程设计)