Prim算法实现
2010-12-21 14:37
615 查看
#include "stdio.h"
#define MAX_VERTEX_NUM 20
typedef struct ArcCell{
int adj;
char *info;
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
char vexs[MAX_VERTEX_NUM];
AdjMatrix arcs;
int vexnum,arcnum;
}MGraph;
struct {
int adjvex;
int lowcost;
}closedge[MAX_VERTEX_NUM];
int minimum(int n)
{
int i,k=0,min=65536;
for(i=0;i<n;i++)
{
if(closedge[i].lowcost>0 && closedge[i].lowcost<min )
{
min=closedge[i].lowcost;
k=i;
}
}
return k;
}
//u直接是顶点的编号
void MiniSpanTree_PRIM(MGraph G,int k)
{
int i,j;
for(j=0;j<G.vexnum;++j)
{
if(j!=k)
{
closedge[j].adjvex=k;
closedge[j].lowcost=G.arcs[k][j].adj;
}
}
closedge[k].lowcost=0;
for(i=1;i<G.vexnum;++i)
{
k=minimum(G.vexnum);
printf("%d/n",k);
closedge[k].lowcost=0;
for(j=0;j<G.vexnum;++j)
if(G.arcs[k][j].adj<closedge[j].lowcost)
{
closedge[j].adjvex=k;
closedge[j].lowcost=G.arcs[k][j].adj;
}
}
}
void main()
{
MGraph G;
G.vexnum=6;
int i,j;
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.arcs[i][j].adj=65536;
G.arcs[0][1].adj=G.arcs[1][0].adj=6;
G.arcs[0][3].adj=G.arcs[3][0].adj=5;
G.arcs[0][2].adj=G.arcs[2][0].adj=1;
G.arcs[1][2].adj=G.arcs[2][1].adj=5;
G.arcs[1][4].adj=G.arcs[4][1].adj=3;
G.arcs[2][4].adj=G.arcs[4][2].adj=6;
G.arcs[2][5].adj=G.arcs[5][2].adj=4;
G.arcs[3][5].adj=G.arcs[5][3].adj=2;
G.arcs[4][5].adj=G.arcs[5][4].adj=6;
G.arcs[2][3].adj=G.arcs[3][2].adj=5;
MiniSpanTree_PRIM(G,0);
}
#define MAX_VERTEX_NUM 20
typedef struct ArcCell{
int adj;
char *info;
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
char vexs[MAX_VERTEX_NUM];
AdjMatrix arcs;
int vexnum,arcnum;
}MGraph;
struct {
int adjvex;
int lowcost;
}closedge[MAX_VERTEX_NUM];
int minimum(int n)
{
int i,k=0,min=65536;
for(i=0;i<n;i++)
{
if(closedge[i].lowcost>0 && closedge[i].lowcost<min )
{
min=closedge[i].lowcost;
k=i;
}
}
return k;
}
//u直接是顶点的编号
void MiniSpanTree_PRIM(MGraph G,int k)
{
int i,j;
for(j=0;j<G.vexnum;++j)
{
if(j!=k)
{
closedge[j].adjvex=k;
closedge[j].lowcost=G.arcs[k][j].adj;
}
}
closedge[k].lowcost=0;
for(i=1;i<G.vexnum;++i)
{
k=minimum(G.vexnum);
printf("%d/n",k);
closedge[k].lowcost=0;
for(j=0;j<G.vexnum;++j)
if(G.arcs[k][j].adj<closedge[j].lowcost)
{
closedge[j].adjvex=k;
closedge[j].lowcost=G.arcs[k][j].adj;
}
}
}
void main()
{
MGraph G;
G.vexnum=6;
int i,j;
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.arcs[i][j].adj=65536;
G.arcs[0][1].adj=G.arcs[1][0].adj=6;
G.arcs[0][3].adj=G.arcs[3][0].adj=5;
G.arcs[0][2].adj=G.arcs[2][0].adj=1;
G.arcs[1][2].adj=G.arcs[2][1].adj=5;
G.arcs[1][4].adj=G.arcs[4][1].adj=3;
G.arcs[2][4].adj=G.arcs[4][2].adj=6;
G.arcs[2][5].adj=G.arcs[5][2].adj=4;
G.arcs[3][5].adj=G.arcs[5][3].adj=2;
G.arcs[4][5].adj=G.arcs[5][4].adj=6;
G.arcs[2][3].adj=G.arcs[3][2].adj=5;
MiniSpanTree_PRIM(G,0);
}
相关文章推荐
- c++中关于图的最小生成树的Prim算法的实现
- 最小生成树 prim算法 C++实现
- Prim算法原理以及完整C代码实现
- 最小生成树Prim算法朴素版 C语言实现
- 最小生成树prim算法实现
- java实现Prim算法
- Prim算法实现最小生成树MST(java)
- 无向图的最小生成树算法的C程序实现代码(Prim算法)
- 编程实现prim算法和Dijkstra算法。
- 图的最小生成树:Prim算法实现
- Prim算法实现最小生成树
- 最小生成树Prim算法实现
- C语言——Prim算法实现最小生成树
- Python pandas 实现图论算法 使用堆加速prim算法 dijkstra floyd
- 邻接表实现PRIM算法(C++)
- poj1789 Truck History(Prim算法实现)
- 图的最小生成树:Prim算法实现
- 最小生成树的prim算法实现
- 最小生成树Prim算法实现
- 最小生成树prim算法实现