数据结构实验图二.docx
- 文档编号:29138030
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:10
- 大小:16.52KB
数据结构实验图二.docx
《数据结构实验图二.docx》由会员分享,可在线阅读,更多相关《数据结构实验图二.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构实验图二
实验七
(二)图的应用
实验目的:
1、熟悉的图的两种存储方式:
邻接矩阵和邻接表;
2、通过实验,掌握图的应用:
求最小生成树、最短路径、关键路径、拓扑排序;
实验要求:
1、在vc++或tc环境下实现大体功能;
2、先完成大体功能,大体功能为必做内容,有多余时刻的同窗能够做选做的内容;
3、独自完成实验操作,并给出相关的数据;
4、每次实验后,撰写实验报告,并在下礼拜四由学习委员搜集并按学号整理好后,交任课教师。
实验内容及步骤:
必做题:
1、构造一个网(有向或无向);
2、求该网的prim算法生成的最小生成树或丛林;
3、求一个源点到其余极点的最短路径;;
选做:
一、求该网的拓扑排序和逆拓扑排序;
参考程序:
二、求该网的prim算法生成的最小生成树或丛林
#include<>
typedefintInfoType;
#defineMAXV100//最大顶点个数
//以下概念邻接矩阵类型
typedefstruct
{intno;//顶点编号
InfoTypeinfo;//顶点其他信息
}VertexType;//顶点类型
typedefstruct//图的定义
{intedges[MAXV][MAXV];//邻接矩阵
intvexnum,arcnum;//顶点数,弧数
VertexTypevexs[MAXV];//存放顶点信息
}MGraph;//图的邻接矩阵类型
//以下概念邻接表类型
typedefstructANode//弧的结点结构类型
{intadjvex;//该弧的终点位置
structANode*nextarc;//指向下一条弧的指针
InfoTypeinfo;//该弧的相关信息,这里用于存放权值
}ArcNode;
typedefintVertex;
typedefstructVnode//邻接表头结点的类型
{Vertexdata;//顶点信息
ArcNode*firstarc;//指向第一条弧
}VNode;
typedefVNodeAdjList[MAXV];//AdjList是邻接表类型
typedefstruct
{AdjListadjlist;//邻接表
intn,e;//图中顶点数n和边数e
}ALGraph;//图的邻接表类型
#defineINF32767//用32767表示∞
voidDispMat(MGraphg)
//输出邻接矩阵g
{
inti,j;
for(i=0;i<;i++)
{
for(j=0;j<;j++)
if[i][j]==INF)
printf("%3s","∞");
else
printf("%3d",[i][j]);
printf("\n");
}
}
voidprim(MGraphg,intv)
{
intlowcost[MAXV],min,n=;
intclosest[MAXV],i,j,k;
for(i=0;i { lowcost[i]=[v][i]; closest[i]=v; } for(i=1;i { min=INF; for(j=0;j if(lowcost[j]! =0&&lowcost[j] { min=lowcost[j];k=j; } printf("边(%d,%d)权为: %d\n",closest[k],k,min); lowcost[k]=0;//标记k已经加入U for(j=0;j if[k][j]! =0&&[k][j] { lowcost[j]=[k][j];closest[j]=k; } } } voidmain() { inti,j,u=3; MGraphg; intA[MAXV][11]; =6;=10; for(i=0;i<;i++) for(j=0;j<;j++) A[i][j]=INF; A[0][1]=5;A[0][2]=8;A[0][3]=7;A[0][5]=3; A[1][2]=4; A[2][3]=5;A[2][5]=9; A[3][4]=5; A[4][5]=1; for(i=0;i<;i++) for(j=0;j<;j++) A[j][i]=A[i][j]; for(i=0;i<;i++) for(j=0;j<;j++) [i][j]=A[i][j]; printf("\n"); printf("图G的邻接矩阵: \n"); DispMat(g); printf("\n"); printf("普里姆算法求解结果: \n"); prim(g,0); printf("\n"); } 3、求一个源点到其余极点的最短路径; #include<> typedefintInfoType; #defineMAXV100//最大顶点个数 //以下概念邻接矩阵类型 typedefstruct {intno;//顶点编号 InfoTypeinfo;//顶点其他信息 }VertexType;//顶点类型 typedefstruct//图的定义 {intedges[MAXV][MAXV];//邻接矩阵 intvexnum,arcnum;//顶点数,弧数 VertexTypevexs[MAXV];//存放顶点信息 }MGraph;//图的邻接矩阵类型 //以下概念邻接表类型 typedefstructANode//弧的结点结构类型 {intadjvex;//该弧的终点位置 structANode*nextarc;//指向下一条弧的指针 InfoTypeinfo;//该弧的相关信息,这里用于存放权值 }ArcNode; typedefintVertex; typedefstructVnode//邻接表头结点的类型 {Vertexdata;//顶点信息 ArcNode*firstarc;//指向第一条弧 }VNode; typedefVNodeAdjList[MAXV];//AdjList是邻接表类型 typedefstruct {AdjListadjlist;//邻接表 intn,e;//图中顶点数n和边数e }ALGraph;//图的邻接表类型 #defineINF32767//用32767表示∞ voidDispMat(MGraphg) //输出邻接矩阵g { inti,j; for(i=0;i<;i++) { for(j=0;j<;j++) if[i][j]==INF) printf("%3s","∞"); else printf("%3d",[i][j]); printf("\n"); } } voidppath(intpath[],inti,intv0) { intk; k=path[i]; if(k==v0)return; ppath(path,k,v0); printf("%d,",k); } voidDisPath(intdist[],intpath[],ints[],intn,intv0)//由path计算最短路径 { inti; printf("path: ");//输出path值 for(i=0;i printf("%3d",path[i]); printf("\n"); for(i=0;i if(s[i]==1&&i! =v0) { printf("从%d到%d的最短路径长度为: %d\t路径为: ",v0,i,dist[i]); printf("%d,",v0);ppath(path,i,v0);printf("%d\n",i); } else printf("从%d到%d不存在路径\n",v0,i); } voidDijkstra(MGraphg,intv0)//狄克斯特拉算法从顶点v0到其余各顶点的最短路径 { intdist[MAXV],path[MAXV]; ints[MAXV]; intmindis,i,j,u,n=; for(i=0;i { dist[i]=[v0][i];//距离初始化 s[i]=0;//s[]置空 if[v0][i] path[i]=v0; else path[i]=-1; } s[v0]=1;path[v0]=0;//源点编号v0放入s中 for(i=0;i { mindis=INF; u=-1; for(j=0;j if(s[j]==0&&dist[j] { u=j;mindis=dist[j]; } s[u]=1;//顶点u加入s中 for(j=0;j if(s[j]==0) if[u][j] { dist[j]=dist[u]+[u][j]; path[j]=u; } } printf("输出最短路径: \n"); DisPath(dist,path,s,n,v0);//输出最短路径 } voidmain() { inti,j,u=0; MGraphg; intA[MAXV][6]={ {INF,5,INF,7,INF,INF}, {INF,INF,4,INF,INF,INF}, {8,INF,INF,INF,INF,9}, {INF,INF,5,INF,INF,6}, {INF,INF,INF,5,INF,INF}, {3,INF,INF,INF,1,INF}}; =6;=10; for(i=0;i<;i++) for(j=0;j<;j++) [i][j]=A[i][j]; printf("\n"); printf("有向图G的邻接矩阵: \n"); DispMat(g); Dijkstra(g,u); printf("\n"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验