资源简介

设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

资源截图

代码片段和文件信息

#include 
using namespace std; 
#define INFINITY 100 
#define MAXNODE 10 
typedef char ElemType; 
typedef struct 

int adj; 
}ArcType; 
typedef struct 

char *city[1];  
}name; 
typedef struct 

name vertexs[MAXNODE]; 
ArcType arcs[MAXNODE][MAXNODE]; 
int vexnumarcnum; 
}GraphType; 
/*****************求该顶点的位置********************/ 
int LocateVex(GraphType GElemType *u[1]) 

int i=-1k; 
for(k=0;kif(**(G.vertexs[k].city)==**u) 

i=k; 
break; 

return i;//失败返回-1 

/*************建立图的邻接矩阵******************/ 
int CreatDN(GraphType *G) 

int ijkweight; 
ElemType *u1[1]*u2[1]; 
cout<<“请输入图的顶点数和弧数“; 
cin>>G->vexnum>>G->arcnum; 
for(i=0;ivexnum;i++) 
for(j=0;jvexnum;j++) 
G->arcs[i][j].adj=INFINITY; 
cout<<“请输入顶点的信息“; 
for(i=0;ivexnum;i++) 
cin>>*G->vertexs[i].city; 
for(k=0;karcnum;k++) 

cout<<“请输入第“<cin>>*u1>>*u2>>weight; 
i=LocateVex(*Gu1); 
j=LocateVex(*Gu2); 
G->arcs[i][j].adj=weight; 
G->arcs[j][i].adj=weight;//无向图 

return 1; 


/***********从一点到其余各点的最短距离***************/ 
void Dijkstra(GraphType *Gchar *u[1]char *v[1]) 

int i1=LocateVex(*Gu); 
int i2=LocateVex(*Gv);  
int iktj; 
int *d=new int[5];  
int *s=new int[5];  
int *p=new int[5];  
int way[20];//保存路径用 
for(s[i1]=1i=0;ivexnum;i++) //初始化数组dsp 
{  
if(i!=i1) 

s[i]=0;d[i]=G->arcs[i1][i].adj;way[i]=i; 
if(d[i]p[i]=0; 
else p[i]=-1; 


for(i=0;ivexnum;i++)  

if(i!=i1) 

t=INFINITY;k=1;  
for(j=0;jvexnum;j++) 
if((j!=i1)&&(!s[j])&&(d[j]
t=d[j];k=j; 

s[k]=1; 
for (j=0;jvexnum;j++) 
if((j!=i1)&&(!s[j])&&(d[j]>d[k]+G->arcs[k][j].adj)) 

d[j]=d[k]+G->arcs[k][j].adj;//d用于保存最短路径的长度 
p[j]=k; 
way[j]=way[k]*10+j;//若该点属于最短路径,则保存该点 




if(d[i2]==100)//不存在路径 
cout<<“对不起,你不能去那“; 
else 

cout<int a[MAXNODE]b[MAXNODE]a1=0b1=0; 

cout<<“路径为“<<*G->vertexs[i1].city; 
while(way[i2]/10!=0||way[i2]!=0) 

a[a1]=way[i2]%10; 
a1++;way[i2]=way[i2]/10; 

a1--; 
while(a1>=0) 

b[b1]=a[a1]; 
cout<<“->“<<*G->vertexs[b[b1]].city; 
b1++;a1--; 


cout<<“\n“<

/***************初始化图**************************/ 
GraphType *chushihua(GraphType *G) 

G=(GraphType*)malloc(sizeof(GraphType)); 

G->vexnum=8; 
G->arcnum=9; 
for(int i=0;ivexnum;i++) 
for(int j=0;jvexnum;j++) 
G->arcs[i][j].adj=INFINITY; 
*G->vertexs[0].city=“前门“;
*G->vertexs[1].city=“图书馆“;
*G->vertexs[2].city=“教一楼“; 
*G->vertexs[3].city=“教二楼“;
*G->vertexs[4].city=“食堂“;
*G->vertexs[5].city=“水房“; 
*G->vertexs[6].city=“操场“;
*G->vertexs[7].city=“商店“; 
*G->vertexs[8].city=“公寓楼“;
*G->vertexs[9].city=“后门“;
G->arcs[0][1].adj=15;G->arcs[1][0].adj=15; 
G->arcs[0][2].adj=40;G->arcs[2][0].adj=40; 
G->arcs[0][3].adj=20;G->arcs[3][0].adj=20; 
G->arcs[2][3].adj=20;G->arcs[3][2].adj=20; 
G->arcs[2][4].adj

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4512  2010-04-28 11:39  xioayuandaohang\123.cpp

     文件     731648  2011-06-20 09:37  xioayuandaohang\校园导航问题.doc

     目录          0  2011-06-20 09:42  xioayuandaohang

----------- ---------  ---------- -----  ----

               736160                    3


评论

共有 条评论