数据结构实验图二.docVIP

  • 3
  • 0
  • 约5.45千字
  • 约 12页
  • 2016-06-07 发布于重庆
  • 举报
数据结构实验图二

实验七(二) 图的应用 实验目的: 熟悉的图的两种存储方式:邻接矩阵和邻接表; 通过实验,掌握图的应用:求最小生成树、最短路径、关键路径、拓扑排序; 实验要求: 在vc++或tc环境下实现基本功能; 先完成基本功能,基本功能为必做内容,有多余时间的同学可以做选做的内容; 独自完成实验操作,并给出相关的数据; 每次实验后,撰写实验报告,并在下星期四由学习委员收集并按学号整理好后,交任课教师。 实验内容及步骤: 必做题: 构造一个网(有向或无向); 求该网的prim算法生成的最小生成树或森林; 求一个源点到其余顶点的最短路径; ; 选做:1、求该网的拓扑排序和逆拓扑排序; 参考程序: 2、求该网的prim算法生成的最小生成树或森林 #include stdio.h typedef int InfoType; #define MAXV 100 //最大顶点个数 //以下定义邻接矩阵类型 typedef struct { int no; //顶点编号 InfoType info; //顶点其他信息 } VertexType; //顶点类型 typedef struct //图的定义 { int edges[MAXV][MAXV]; //邻接矩阵 int vexnum,arcnum; //顶点数,弧数 VertexType vexs[MAXV]; //存放顶点信息 } MGraph; //图的邻接矩阵类型 //以下定义邻接表类型 typedef struct ANode //弧的结点结构类型 { int adjvex; //该弧的终点位置 struct ANode *nextarc; //指向下一条弧的指针 InfoType info; //该弧的相关信息,这里用于存放权值 } ArcNode; typedef int Vertex; typedef struct Vnode //邻接表头结点的类型 { Vertex data; //顶点信息 ArcNode *firstarc; //指向第一条弧 } VNode; typedef VNode AdjList[MAXV]; //AdjList是邻接表类型 typedef struct { AdjList adjlist; //邻接表 int n,e; //图中顶点数n和边数e } ALGraph; //图的邻接表类型 #define INF 32767 //用32767表示∞ void DispMat(MGraph g) //输出邻接矩阵g { int i,j; for (i=0;ig.vexnum;i++) { for (j=0;jg.vexnum;j++) if (g.edges[i][j]==INF) printf(%3s,∞); else printf(%3d,g.edges[i][j]); printf(\n); } } void prim(MGraph g,int v) { int lowcost[MAXV],min,n=g.vexnum; int closest[MAXV],i,j,k; for (i=0;in;i++) //给lowcost[]和closest[]置初值 { lowcost[i]=g.edges[v][i]; closest[i]=v; } for (i=1;in;i++) //找出n-1个顶点 { min=INF; for (j=0;jn;j++) //在(V-U)中找出离U最近的顶点k if (lowcost[j]!=0 lowcost[j]min) { min=lowcost[j];k=j; } printf( 边(%d,%d)权为:%d\n,closest[k],k,min); lowcost[k]=0; //标记k已经加入U for (j=0;jn;j++) //修改数组lowcost和closest if (g.edges[k][j]!=0 g.edges[k][j]lowcost[j]) { lowcost[j]=g.ed

文档评论(0)

1亿VIP精品文档

相关文档