c语言编写学校导航作业,校园导航程序。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#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 vexnum,arcnum;

}GraphType;

/*****************求该顶点的位置********************/

int LocateVex(GraphType G,ElemType *u[1])

{

int i=-1,k;

for(k=0;k

if(**(G.vertexs[k].city)==**u)

{

i=k;

break;

}

return i;//失败返回-1

}

/*************建立图的邻接矩阵******************/

int CreatDN(GraphType *G)

{

int i,j,k,weight;

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(*G,u1);

j=LocateVex(*G,u2);

G->arcs[i][j].adj=weight;

G->arcs[j][i].adj=weight;//无向图

}

return 1;

}

/***********从一点到其余各点的最短距离***************/

void Dijkstra(GraphType *G,char *u[1],char *v[1])

{

int i1=LocateVex(*G,u);

int i2=LocateVex(*G,v);

int i,k,t,j;

int *d=new int[5];

int *s=new int[5];

int *p=new int[5];

int way[20];//保存路径用

for(s[i1]=1,i=0;ivexnum;i++) //初始化数组d,s,p

{

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=0,b1=0;

cout<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<"<vertexs[b[b1]].city;

b1++;a1--;

}

}

cout<

}

/***************初始化图**************************/

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->arcs[0][1].adj=2;G->arcs[1][0].adj=2;

G->arcs[1][2].adj=6;G->arcs[2][1].adj=6;

G->arcs[2][3].adj=9;G->arcs[3][2].adj=9;

G->arcs[1][3].adj=7;G->arcs[3][1].adj=7;

G->arcs[4][3].adj=18;G->arcs[3][4].adj=18;

G->arcs[5][1].adj=15;G->arcs[1][5].adj=15;

G->arcs[3][5].adj=12;G->arcs[5][3].adj=12;

G->arcs[5][6].adj=22;G->arcs[6][5].adj=22;

G->arcs[5][4].adj=3;G->arcs[4][5].adj=3;

return G;

}

void caidan(GraphType *G)

{

char *q[1];char *w[1];

char b[10],a[10];

cout<

cin>>a;*w=a;

while(LocateVex(*G,w)>7||LocateVex(*G,w)<0)

{cout<

cin>>a;*w=a;

}

cout<

cin>>b;*q=b;

while(LocateVex(*G,w)>7||LocateVex(*G,w)<0)

{cout<

cin>>a;*w=a;

}

Dijkstra(G,w,q);

}

//------------------------------------------------------

void main()

{

GraphType *G;

G=chushihua(G);

cout<

cout<

char i='5';

while(i)

{cout<

cin>>i;

if(i!='1'&&i!='2')continue;

switch(i)

{

case '1':caidan(G);break;

case '2':i=0;

}

}

}

还有很多类似的程序,懒得发了,有需要的加qq群:50379656

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值