最小单元路径 数据结构 实验 程序.docx

上传人:b****2 文档编号:2264816 上传时间:2022-10-28 格式:DOCX 页数:11 大小:16.49KB
下载 相关 举报
最小单元路径 数据结构 实验 程序.docx_第1页
第1页 / 共11页
最小单元路径 数据结构 实验 程序.docx_第2页
第2页 / 共11页
最小单元路径 数据结构 实验 程序.docx_第3页
第3页 / 共11页
最小单元路径 数据结构 实验 程序.docx_第4页
第4页 / 共11页
最小单元路径 数据结构 实验 程序.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

最小单元路径 数据结构 实验 程序.docx

《最小单元路径 数据结构 实验 程序.docx》由会员分享,可在线阅读,更多相关《最小单元路径 数据结构 实验 程序.docx(11页珍藏版)》请在冰豆网上搜索。

最小单元路径 数据结构 实验 程序.docx

最小单元路径数据结构实验程序

#include

#include

#defineINFINITY1000

#defineMAX_VERTEX_NUM20

typedefenum{DG,DN,UDG,UDN}Graphkind;

typedefstructArcCell{

intadj;

char*info;

}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedefstruct{

charvexs[MAX_VERTEX_NUM][4];

AdjMatrixarcs;

intvexnum,arcnum;

Graphkindkind;

}MGraph;

intvisited[MAX_VERTEX_NUM];

voidCreateGraph(MGraph*G);

voidCreateDG(MGraph*G);//有向图

voidCreateDN(MGraph*G);//有向网

voidCreateUDG(MGraph*G);//无向图

voidCreateUDN(MGraph*G);//无向网

intLocateVex(MGraph*G,charv[4]);

voidFirst_next_adj(MGraph*G,inti);

voiddfs1(MGraph*G,inti);

voidbfs1(MGraph*G,inti);

voidshortesPath_DIJ(MGraph*G,intv0,intp[][MAX_VERTEX_NUM],intd[MAX_VERTEX_NUM]);

#defineQUEUE_INIT_SIZE100

#defineQUEUEINCREMENT10

typedefintQElemType;

typedefstruct{

QElemType*elem;

intfront;

intrear;

intqueuesize;

intincrementsize;

}SqQueue;

voidInitqueue_sq(SqQueue*q,intn);

intQueuelength_sq(SqQueueQ);

intDequeue_sq(SqQueue*Q,QElemType*e);

voidincrement(SqQueue*Q);

voidEnqueue_sq(SqQueue*Q,QElemTypee);

intGetqueue_sq(SqQueueQ,QElemType*e);

intQueueempty(SqQueueQ);

voidmain(){

MGraphG;

inti,j;

charv[4];

intp[MAX_VERTEX_NUM][MAX_VERTEX_NUM],d[MAX_VERTEX_NUM];

CreateGraph(&G);

for(i=0;i

for(j=0;j

printf("%8d",G.arcs[i][j].adj);

putchar('\n');

}

printf("请输入深度优先搜索初始顶点Vi:

");

getchar();

scanf("%s",v);

i=LocateVex(&G,v);

dfs1(&G,i);

printf("\n请输入广度优先搜索初始顶点Vi:

");

getchar();

scanf("%s",v);

i=LocateVex(&G,v);

bfs1(&G,i);

if(G.kind==DN||G.kind==UDN){

printf("\n输入查找第一邻接点的顶点:

");

getchar();

scanf("%s",v);

i=LocateVex(&G,v);

First_next_adj(&G,i);

shortesPath_DIJ(&G,0,p,d);

}

}

voiddfs1(MGraph*G,inti){

intj;

printf("%5s",G->vexs[i]);

visited[i]=1;

for(j=0;jvexnum;j++)

if(i!

=j&&G->arcs[i][j].adj!

=INFINITY&&!

visited[j])

dfs1(G,j);

}

voidbfs1(MGraph*G,inti){

intk,j;

SqQueueQ;

for(j=0;jvexnum;j++)

visited[j]=0;

Initqueue_sq(&Q,G->vexnum);

printf("\n%5s",G->vexs[i]);

visited[i]=1;

Enqueue_sq(&Q,i);

while(!

Queueempty(Q)){

Dequeue_sq(&Q,&k);

for(j=0;jvexnum;j++){

if(k!

=j&&G->arcs[k][j].adj!

=INFINITY&&!

visited[j]){

printf("%5s",G->vexs[j]);

visited[j]=1;

Enqueue_sq(&Q,j);

}

}

}

}

intLocateVex(MGraph*G,charv[4]){

inti=0;

while(ivexnum){

if(strcmp(G->vexs[i],v)==0)returni;

i++;

}

printf("\n输入的顶点不存在!

");

return0;

}

voidCreateUDG(MGraph*G){

inti,j,k;

charv1[4],v2[4];

printf("输入vexnum,arcnum:

");

scanf("%d%d",&G->vexnum,&G->arcnum);

printf("输入vexs[i]:

\n");

getchar();

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

gets(G->vexs[i]);

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

for(j=0;jvexnum;++j){

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

G->arcs[i][j].info=NULL;

}

for(k=0;kvexnum;++k){

printf("输入v1,v2:

");

scanf("%s%s",v1,v2);

i=LocateVex(G,v1);

j=LocateVex(G,v2);

printf("%4s%4s%8d%8d\n",v1,v2,i,j);

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

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

}

}

voidCreateUDN(MGraph*G){

inti,j,k,w;

charv1[4],v2[4];

printf("输入vexnum,arcnum:

");

scanf("%d%d",&G->vexnum,&G->arcnum);

printf("输入vexs[i]:

\n");

getchar();

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

gets(G->vexs[i]);

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

for(j=0;jvexnum;++j){

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

G->arcs[i][j].info=NULL;

}

for(k=0;kvexnum;++k){

printf("输入v1,v2,w:

");

scanf("%s%s%d",v1,v2,&w);

i=LocateVex(G,v1);

j=LocateVex(G,v2);

printf("%4s%4s%8d%8d\n",v1,v2,i,j);

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

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

}

}

voidCreateDG(MGraph*G)

{

inti,j,k;

charv1[4],v2[4];

printf("输入vexnum,arcnum:

");

scanf("%d%d",&G->vexnum,&G->arcnum);

printf("输入vexs[i]:

\n");

getchar();

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

gets(G->vexs[i]);

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

for(j=0;jvexnum;++j){

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

G->arcs[i][j].info=NULL;

}

for(k=0;kvexnum;++k){

printf("输入v1,v2:

");

scanf("%s%s",v1,v2);

i=LocateVex(G,v1);

j=LocateVex(G,v2);

printf("%4s%4s%8d%8d\n",v1,v2,i,j);

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

}

}

voidCreateDN(MGraph*G){

inti,j,k,w;

charv1[4],v2[4];

printf("输入vexnum,arcnum:

");

scanf("%d%d",&G->vexnum,&G->arcnum);

printf("输入vexs[i]:

\n");

getchar();

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

gets(G->vexs[i]);

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

for(j=0;jvexnum;++j){

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

G->arcs[i][j].info=NULL;

}

for(k=0;karcnum;++k){

printf("输入v1,v2,w:

");

scanf("%s%s%d",v1,v2,&w);

i=LocateVex(G,v1);

j=LocateVex(G,v2);

printf("%4s%4s%8d%8d\n",v1,v2,i,j);

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

}

}

voidCreateGraph(MGraph*G){

intk;

printf("输入图的类型\nDG-0,DN-1,UDG-2,UDN-3:

");

scanf("%d",&k);

switch(k){

case0:

G-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1