课程设计,0号题

</pre><p><pre name="code" class="html">#include "StdAfx.h"
#include<string.h> 
#include <iostream>
using namespace std;
#define MAX 10000 
#define MAXLEN 10 
#define ADJTYPE int  
typedef struct                            
{   
	char name[30];   
	int num;
}VEXTYPE; 
typedef struct  
{   
	VEXTYPE vexs[MAXLEN];                 
	ADJTYPE arcs[MAXLEN][MAXLEN];     
	int vexnum,arcnum ;                     
}MGraph;
MGraph b;  
MGraph InitGraph() 
{                                     
	int i, j; 
	MGraph G;  
	G.vexnum =10;                            
	G.arcnum =13;                          
	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,"钟海楼");
	for(i=0;i<G.vexnum;i++)     
		for(j=0;j<G.vexnum;j++)        
			G.arcs[i][j]=MAX; 
	G.arcs[0][1]=12;
	G.arcs[0][3]=153; 
	G.arcs[1][2]=22; 
	G.arcs[1][9]=141;  
	G.arcs[2][4]=32;
	G.arcs[3][9]=139;
	G.arcs[4][5]=42; 
	G.arcs[4][9]=33; 
	G.arcs[5][6]=71;
	G.arcs[5][7]=42; 
	G.arcs[6][8]=185; 
	G.arcs[7][8]=62; 
	G.arcs[8][9]=143;
	for(i=0;i<G.vexnum;i++)  
		for(j=0;j<G.vexnum;j++)   
			G.arcs[j][i]=G.arcs[i][j];
	return G; } 
void Menu()                               //输出菜单 
{   
	cout<<"----输入0进入最短路径查询\n";
    cout<<"----输入1退出查询";
}   
void Dijkstra(MGraph * G)                  //迪杰斯特拉算法求最短路径
{  
	int v,w,i,min,t=0,x,v0,v1;  
	int final[20], D[20], p[20][20]; 
	cout<<"    输入起点编号:";  
	cin>>v0;  
	if(v0<0||v0>G->vexnum)  
	{    
		cout<<"  此点编号不存在!请重新输入顶点编号:";   
		cin>>v0; 
	}   
	cout<<"    输入终点编号:";  
	cin>>v1;   
	if(v1<0||v1>G->vexnum)  
	{    
		cout<<"  此点编号不存在!请重新输入顶点编号:";   
		cin>>v1;  
	}   
	for(v=0;v<G->vexnum;v++)   
	{ 
		final[v]=0;   
		D[v]=G->arcs[v0][v]; 
		for(w=0;w<G->vexnum;w++)    
			p[v][w]=0;   
		if(D[v]<MAX)    
		{     
			p[v][v0]=1;p[v][v]=1; 
		} 
	}   
	D[v0]=0;
	final[v0]=1;
	for(i=1;i<G->vexnum;i++)  
	{    
		min=MAX;   
		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]<D[w]))     
					{       
						D[w]=min+G->arcs[v][w];     
						for(x=0;x<G->vexnum;x++)     
							p[w][x]=p[v][x];      
						p[w][w]=1;    
					} 
	}  
	cout<<"       最短路径路径";  
	for(int j=0;j<G->vexnum;j++) 
	{   
		if(p[v1][j]==1)    
			cout<<"<==>"<<G->vexs[j].name;
	} 
	cout<<endl;
}     
void main()                                //主函数
{
	cout<<"----------您正在使用广东海洋大学文字地图(极简版)-------------"<<endl;
	cout<<endl;
    cout<<"                               校医院8 "<<endl;
	cout<<"                                *    *    *     *    "<<endl;
	cout<<"                               *        *             *"<<endl;
	cout<<"                              *         *                 *"<<endl;
	cout<<"                            *           *                   *"<<endl;
	cout<<"                           *        科技楼7                  *"<<endl;
	cout<<"                          *              *                  *"<<endl;
	cout<<"     西湖3*  *  *  * 钟海楼9                *                第二"<<endl;
	cout<<"       *              *      *       *   图书馆5  *  *  *   *食堂6"<<endl;
	cout<<"        *             *       主楼4"<<endl;
	cout<<"          *           *         *  "<<endl;
	cout<<"            *         *         *  "<<endl;
	cout<<"              *       *   *  行政楼2"<<endl;
	cout<<"                 *     *       *  "<<endl;
	cout<<"                    *   蝴蝶湖 * 蝴蝶湖1"<<endl;
	cout<<"                           校门口0"<<endl;
	int a;
	b=InitGraph();
	Menu();
	cin>>a;
	while(a!=1)  
	{    
		switch(a)   
		{               
		case 0:
			Dijkstra(&b);
			Menu();
			break;            
		case 1:
			exit(1);
			break;   
		default:
			break;   
		}     
		cin>>a;  
	} 
} 


参考于:

http://blog.csdn.net/z28126308/article/details/42552957

http://wenku.baidu.com/view/0472612bf18583d04964597a.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值