最小单元路径 数据结构 实验 程序.docx
- 文档编号:2264816
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:11
- 大小:16.49KB
最小单元路径 数据结构 实验 程序.docx
《最小单元路径 数据结构 实验 程序.docx》由会员分享,可在线阅读,更多相关《最小单元路径 数据结构 实验 程序.docx(11页珍藏版)》请在冰豆网上搜索。
最小单元路径数据结构实验程序
#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;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;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;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(i 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;i gets(G->vexs[i]); for(i=0;i for(j=0;j G->arcs[i][j].adj=INFINITY; G->arcs[i][j].info=NULL; } for(k=0;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;i gets(G->vexs[i]); for(i=0;i for(j=0;j G->arcs[i][j].adj=INFINITY; G->arcs[i][j].info=NULL; } for(k=0;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;i gets(G->vexs[i]); for(i=0;i for(j=0;j G->arcs[i][j].adj=INFINITY; G->arcs[i][j].info=NULL; } for(k=0;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;i gets(G->vexs[i]); for(i=0;i for(j=0;j G->arcs[i][j].adj=INFINITY; G->arcs[i][j].info=NULL; } for(k=0;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-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最小单元路径 数据结构 实验 程序 最小 单元 路径