</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