#include"stdio.h" #include<stdlib.h> #define Max Vertexnum 100 typedef enum{false,true}Boolean;//FALSE为0,TRUE为1 Boolean visited[Max VertexNum]; typedef int Vertextype; typedef struct node//边表节点 { int adjvex;//邻接点域 struct node *next;//链域 } typedef struct vnode//顶点表节点 { Vertextype vertex;//顶点域 EdgeNode *firstedge;//边表头指针 }VertexNode; typedef VertexNode AdjList[Max VertexNum];//AdjList是邻接表类型
typedef struct ALGraph { AdjList adjlist;//邻接表 int n,e;//图中当前顶点数和边数 }Graphic; typedef struct tree { VertexNode *tnode; EdgeNode *tedge; }MSt; MSt *mst; void CreatGraphic(Graphic *G)//建立无向图的邻接表表示 { int i,j,k; EdgeNode *s; scanf("%d%d",&G->n,&G->e);//读入顶点数和边数 for(i=0;i<G->n;i++)//建立顶点表 { G->adjlist[i].vertex=getchar();//读入顶点信息 G->adjlist[i].firstedge=null;//边表置为空表 } for(k=0;k<G->e;k++)//建立边表 { scanf("%d%d",&i,&j);//读入边(vi,vj)的顶点对序号 s=(EdgeNode *)malloc(sizeof(EdgeNode));//生成边表节点 s->adjlist=i;//邻接点序号为j* s->next=G->adjlist[i].firstedge; G->adjlist[i].firstedge=s;//将新的节点*s插入顶点vi的边表头部 s=(EdgeNode*)malloc(sizeof(EdgeNode)); s->adjvex=i;//邻接点序号为i* s-.next=G->adjlist[j].firstedge; G->adjlist[j].firstedge=s;//将新节点*s插入顶点vj的边表头部 } } void PrimMST(Graphic *G,vertextype r)//求图G的以r为根的MST,结果放在T=(U,TE)中 { int k,n; initCandidateSet(...);//初始化:设置初始的轻边候选集 for(k=0;k<n-1;k++) { (u,v)=SelectLiShtEdge(...);//选取轻边(u,v) // ModifyCandidateSet(...); } } void main() { Graphic graph; Vertextype r=3; CreatGraphic(&graph); PrimMst(&graph,r); }
这是我看书遇到的一个题,中间void PrimMST
是伪代码,小弟我实在不行,还望高手给改一下,让这个程序能够运行出来!先谢谢了!