//此代码是数据结构的原始模板,可以刚接触或考研时借鉴下,不适于刷题
#include<stdio.h>
#include<malloc.h>
#define INFINITY 32768
#define MAX_VERTEX_NUM 20
int visited[100];
typedef struct node1
{
int adj;
}gra;
typedef struct node2
{
gra arcs[100][100];
int vertex[100];
int vexnum,arcnum;
}*graph,graph1;
typedef struct node3
{
int adjvex;
int lowcost;
}*close1,close2;
typedef struct node4
{
close2 closedge[MAX_VERTEX_NUM];
}*close3,close4;
int locatevertex(graph &g,int v)
{
int j=0,k;
for(k=0;k<g->vexnum;k++)
{
if(g->vertex[k]==v)
{
j=k;
break;
}
}
return j;
}
void create(graph &g)
{
int i,j,k,weight,v1,v2;
printf("请输入图的最大顶点数和最大弧数: ");
scanf("%d%d",&g->vexnum,&g->arcnum);
for(i=0;i<g->vexnum;i++)
{
for(j=0;j<g->vexnum;j++)
{
g->arcs[i][j].adj=INFINITY;
}
}
printf("请输入图的各顶点值: ");
for(i=0;i<g->vexnum;i++)
scanf("%d",&g->vertex[i]);
for(k=0;k<g->arcnum;k++)
{
printf("请输入两顶点表示有关系,及其权值: ");
scanf("%d%d",&v1,&v2);
i=locatevertex(g,v1);
j=locatevertex(g,v2);
scanf("%d",&weight);
g->arcs[i][j].adj=weight;
g->arcs[j][i].adj=weight;
}
}
int minium(graph &g,close3 &clos)
{
int min=INFINITY;
for(int i=0;i<g->vexnum;i++)
{
if(min>clos->closedge[i].lowcost&&clos->closedge[i].lowcost!=0)
{
min=clos->closedge[i].lowcost;
}
}
for(i=0;i<g->vexnum;i++)
{
if(clos->closedge[i].lowcost==min)
{
return i;
}
}
}
void minispantree_prim(close3 &clos,graph &g,int u)
{
int k,k0,u0,v0;
k=locatevertex(g,u);
clos=(close3)malloc(sizeof(close4));
clos->closedge[k].lowcost=0;
for(int i=0;i<g->vexnum;i++)
{
if(i!=k)
{
clos->closedge[i].adjvex=u;
clos->closedge[i].lowcost=g->arcs[k][i].adj;
}
}
printf("输出生成树的当前最小边: ");
for(int e=1;e<=g->vexnum-1;e++)
{
k0=minium(g,clos);
u0=clos->closedge[k0].adjvex;
v0=g->vertex[k0];
printf("(%d,%d)",u0,v0);
clos->closedge[k0].lowcost=0;
for(i=0;i<g->vexnum;i++)
{
if(g->arcs[k0][i].adj<clos->closedge[i].lowcost)
{
clos->closedge[i].lowcost=g->arcs[k0][i].adj;
clos->closedge[i].adjvex=v0;
}
}
}
}
int main()
{
graph g;
close3 clos;
g=(graph)malloc(sizeof(graph1));
create(g);
minispantree_prim(clos,g,g->vertex[0]);
printf("\n");
return 0;
}
连通图最小生成树之普里姆算法
最新推荐文章于 2021-02-04 21:00:41 发布