题0

#define Hello      10000      
 #define Max_Vertex_Num      40 
#define MAX 40 
#include<cstdlib> 
#include<cstring>
 #include <iostream>
 using namespace std;
 #include <iomanip>
 typedef struct Load
 {  
	 int adj;      
 }
 Load,AdjMatrix[Max_Vertex_Num][Max_Vertex_Num]; 
 typedef struct   
 {  
	 char name[30]; 
	 int num; 
 }infotype;
 typedef struct 
 { 
	 infotype vexs[Max_Vertex_Num];
	 AdjMatrix arcs; 
	 int vexnum,arcnum; 
 } 
 MGraph; 
 MGraph b; 
 MGraph InitGraph(void); 
 void Menu(void); 
 void Browser(MGraph *G); 
 void Dijk(MGraph * G);
 void Floyd(MGraph *G);
 void main(void) 
{  
	 system("mode con: cols=100 lines=40");
	 int i; 
	 b=InitGraph(); 
	 Menu(); 
	 cin>>i; 
	 while(i!=5) 
	 {  
		 switch(i) 
		 {   
		 case 1:system("cls");
			 Browser(&b);
			 Menu();
			 break;   
		 case 2:system("cls");
			 Dijk(&b);
			 Menu();
			 break; 
		 case 3:system("cls");
			 Floyd(&b);
			 Menu();
			 break;  
		 case 4:exit(1);
			 break;  
		 default:break; 
		 }  
		 cin>>i; 
	 }
 } 
 MGraph InitGraph(void)
 {  
	 MGraph G; 
	 int i,j;  
	 G.vexnum=14; 
	 G.arcnum=17;        
	 for(i=0;i<G.vexnum;i++)  
		 G.vexs[i].num=i;   
strcpy(G.vexs[0].name,"学校大门   "); 
	 strcpy(G.vexs[1].name,"蝴蝶湖 "); 
	 strcpy(G.vexs[2].name,"教学主楼 "); 
	 strcpy(G.vexs[3].name,"钟海楼 ");  
	 strcpy(G.vexs[4].name,"中心广场   ");  
 strcpy(G.vexs[5].name,"图书馆 ");  
 strcpy(G.vexs[6].name,"学生第三饭堂");  
 strcpy(G.vexs[7].name,"中区宿舍楼 "); 
 strcpy(G.vexs[8].name,"西湖");  
 strcpy(G.vexs[9].name,"西区宿舍楼");                                         
 strcpy(G.vexs[10].name,"商业中心"); 
 strcpy(G.vexs[11].name,"学生第一饭堂"); 
 strcpy(G.vexs[12].name,"东区足球场 ");  
 strcpy(G.vexs[13].name,"溜冰场"   );
 for(i=0;i<G.vexnum;i++)   
	 for(j=0;j<G.vexnum;j++) 
		 G.arcs[i][j].adj=Hello;
	 G.arcs[0][1].adj=50; 
	 G.arcs[0][2].adj=100;
	 G.arcs[1][3].adj=120;
	 G.arcs[1][5].adj=120;
	 G.arcs[1][6].adj=80;
	 G.arcs[0][6].adj=200;; 
	 G.arcs[2][3].adj=30; 
	 G.arcs[2][5].adj=60; 
	 G.arcs[3][4].adj=10; 
	 G.arcs[4][11].adj=100; 
	 G.arcs[5][6].adj=50;  
	 G.arcs[6][7].adj=20; 
	 G.arcs[7][8].adj=70; 
	 G.arcs[8][9].adj=140;
	 G.arcs[9][10].adj=600; 
	 G.arcs[10][12].adj=250; 
	 G.arcs[11][12].adj=200; 
	 for(i=0;i<G.vexnum;i++)  
		 for(j=0;j<G.vexnum;j++)
			 G.arcs[j][i].adj=G.arcs[i][j].adj;
		 return G; 
 }
 
void Menu() 
{  
	cout<<"                      Welcome To 广东海洋大学         "<<endl;
	cout<<"                     请选择能为您做到的服务:              "<<endl;
	cout<<"                          1.浏览各景点                   "<<endl; 
	cout<<"                          2.查看所有游览路线                    "<<endl;
	cout<<"                          3.选择出发点和目的地                  "<<endl; 
	cout<<"                          4.退出系统                            "<<endl; 
	cout<<"                      请选择能为您做到的服务: ";
 } 
void Browser(MGraph *G) 
{ 
	int v;  
	cout<<"┃编号┃景点名称                                                                       "<<endl; 
	for(v=0;v<G->vexnum;v++) 
	cout<<"("<<G->vexs[v].num<<")"<<G->vexs[v].name<<endl; 
 } 
 void Dijk(MGraph * G)
 {  
	 int v,w,i,min,t=0,x,flag=1,v0;   
	 int final[20], D[20], p[20][20]; 
	 cout<<"┃编号┃景点名称          "<<endl; 
	 for(v=0;v<G->vexnum;v++)  
	cout<<"┃"<<G->vexs[v].num<<"┃"<<G->vexs[v].name<<endl; 
	 while(flag) 
 {  
		 cout<<"请输入一个起始景点编号:";  
		 cin>>v0;  
		 if(v0<0||v0>G->vexnum) 
		 {    
			 cout<<"景点编号不存在!请重新输入景点编号:";  
			 cin>>v0;  
		 }   
		 if(v0>=0&&v0<G->vexnum) 
			 flag=0; 
	 }  
	 for(v=0;v<G->vexnum;v++) 
	 {     
		 final[v]=0; 
		 D[v]=G->arcs[v0][v].adj; 
		 for(w=0;w<G->vexnum;w++) 
			 p[v][w]=0;  
		 if(D[v]<Hello)  
		 {   
			 p[v][v0]=1;p[v][v]=1; 
		 }  
	 } 
	 D[v0]=0;final[v0]=1; 
	 for(i=1;i<G->vexnum;i++) 
	 {   
		 min=Hello;  
		 for(w=0;w<G->vexnum;w++) 
			 if(!final[w])    
				 if(D[w]<min){v=w;min=D[w];}  
				 final[v]=1;   
				 for(w=0;w<G->vexnum;w++)  
					 if(!final[w]&&(min+G->arcs[v][w].adj<D[w]))  
					 {    
						 D[w]=min+G->arcs[v][w].adj; 
						 for(x=0;x<G->vexnum;x++)    
							 p[w][x]=p[v][x]; 
						 p[w][w]=1;  
					 } 
	 }  
	 for(v=0;v<G->vexnum;v++) 
	 {   
		 if(v0!=v) cout<<G->vexs[v0].name; 
		 for(w=0;w<G->vexnum;w++) 
  {    
			 if(p[v][w]&&w!=v0)
				 cout<<"-->"<<G->vexs[w].name;
			 t++;  
		 }  
		 if(t>G->vexnum-1&&v0!=v)
			 cout<<"    这是最短路线,总长为:"<<D[v]<<"米"<<endl;  } 
 } 
 void Floyd(MGraph *G)
 {  
	 int v,u,i,w,k,j,flag=1,p[14][14][14],D[14][14];
	 cout<<"┃编号┃景点名称  "<<endl; 
	 for(v=0;v<G->vexnum;v++) 
cout<<"┃"<<G->vexs[v].num<<"┃"<<G->vexs[v].name<<endl; 
	 for(v=0;v<G->vexnum;v++)  
		 for(w=0;w<G->vexnum;w++)  
		 {    
			 D[v][w]=G->arcs[v][w].adj; 
			 for(u=0;u<G->vexnum;u++)   
				 p[v][w][u]=0;   
			 if(D[v][w]<Hello) 
			 {    
				 p[v][w][v]=1;p[v][w][w]=1; 
			 } 
		 }  
		 for(u=0;u<G->vexnum;u++) 
			 for(v=0;v<G->vexnum;v++) 
				 for(w=0;w<G->vexnum;w++) 
					 if(D[v][u]+D[u][w]<D[v][w]) 
					 {      
						 D[v][w]=D[v][u]+D[u][w]; 
						 for(i=0;i<G->vexnum;i++) 
							 p[v][w][i]=p[v][u][i]||p[u][w][i]; 
					 }   
					while(flag) 
			 { 
 cout<<"请输入您当前的位置和目的地的编号(用空格隔开):"; 
 cin>>k>>j;  
 if(k<0||k>G->vexnum||j<0||j>G->vexnum)  
 {  
	 cout<<"景点编号不存在!请重新输入出发点和目的地的编号:"; 
     cin>>k>>j;   }  
 if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)   
	 flag=0;
 }  
	cout<<G->vexs[k].name;
	for(u=0;u<G->vexnum;u++)  
		if(p[k][j][u]&&k!=u&&j!=u) 
			cout<<"-->"<<G->vexs[u].name;
		cout<<"-->"<<G->vexs[j].name<<endl;
		cout<<" 这是最短路线,总长为:"<<D[k][j]<<"米"<<endl;
 }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值