Prim算法C语言实现

原创 2016年06月02日 00:47:49
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define NUM 6

typedef struct Node
{
     int num;
     int data;
} Node;
typedef struct MGraph
{
     int edges[NUM][NUM];
     int n,e;
} MGraph;

MGraph *build_graph();
void Prim(MGraph *mgraph, int v);

int main(void )
{
     MGraph *mgraph;

     mgraph=build_graph();
     Prim(mgraph, 0);
     return 0;
}

MGraph *build_graph()
{
     MGraph *mgraph;
     int i,j;
     int this_edges=0;
     int arrays[NUM][NUM]={{0,6,1,5,INT_MAX,INT_MAX},
			   {6,0,5,INT_MAX,3,INT_MAX},
			   {1,5,0,5,6,4},
			   {5,INT_MAX,5,0,INT_MAX,2},
			   {INT_MAX,3,6,INT_MAX,0,6},
			   {INT_MAX,INT_MAX,4,2,6,0}};
     mgraph=(MGraph *)malloc(sizeof(MGraph));
     for(i=0;i<NUM;i++)
     {
	  for(j=0;j<NUM;j++)
	  {
	       mgraph->edges[i][j]=arrays[i][j];
	       if(arrays[i][j]!=0 && arrays[i][j]!=INT_MAX)
	       {
		    this_edges++;
	       }
	  }
     }
     mgraph->n=NUM;
     mgraph->e=this_edges;

     printf("node=%d,edges=%d\n",mgraph->n,mgraph->e);
     for(i=0;i<NUM;i++)
     {
	  for(j=0;j<NUM;j++)
	  {
	       if(mgraph->edges[i][j]!=INT_MAX)
	       {
		    printf("%3d",mgraph->edges[i][j]);
	       }
	       else
	       {
		    printf("%3c",'&');
	       }
	  }
	  printf("\n");
     }
     
     return mgraph;
     
}
void Prim(MGraph *mgraph, int v)
{
     int i,j;
     int min,index;
     int dis[NUM];
     int pre[NUM];

     for(i=0;i<mgraph->n;i++)
     {
	  dis[i]=mgraph->edges[v][i];
	  pre[i]=v;
     }


     for(j=1;j<mgraph->n;j++)
     {
	  min=INT_MAX;
	  index=v;	  
	  for(i=0;i<mgraph->n;i++)
	  {
	       if(dis[i]!=0 && dis[i]!=INT_MAX)
	       {
		    if(dis[i]<min)
		    {
			 min=dis[i];
			 index=i;
		    }
	       }
	  }
	  printf("%d-%d:%d\n",pre[index],index,min);

	  for(i=0;i<mgraph->n;i++)
	  {
	       if(mgraph->edges[i][index]<dis[i])
	       {
		    dis[i]=mgraph->edges[i][index];
		    pre[i]=index;
	       }
	  }
     }
}

Prim算法原理以及完整C代码实现

Prim算法涉及到几个基本的概念
  • u014488381
  • u014488381
  • 2014年11月23日 12:07
  • 8142

Prim算法的C语言实现(邻接矩阵)

#include #include #include #include #define MAX 100 // 矩阵最大容量 #define INF (...
  • tianyalangz
  • tianyalangz
  • 2015年12月24日 17:23
  • 781

数据结构之---C语言实现最小生成树之prim(普里姆)算法

数据结构之---C语言实现最小生成树之prim(普里姆)算法
  • u012965373
  • u012965373
  • 2015年08月12日 00:17
  • 6096

C语言实现prim算法

  • 2015年08月12日 22:06
  • 82KB
  • 下载

C语言普里姆算法的实现

普里姆算法
  • ZGUIZ
  • ZGUIZ
  • 2017年01月20日 18:30
  • 736

c语言实现最小生成树的prim算法和kruskal算法

  • 2013年12月21日 12:06
  • 62KB
  • 下载

最小生成树的Prim算法和Kruskal算法java代码实现

最小生成树的Prim算法和Kruskal算法java代码实现
  • Jarvan_Song
  • Jarvan_Song
  • 2016年09月17日 21:31
  • 1566

Prim算法介绍与实现

普里姆(Prim)算法
  • u012904198
  • u012904198
  • 2014年04月15日 11:58
  • 1740

Prim算法代码

  • 2014年11月23日 12:59
  • 492KB
  • 下载

Prim最小生成树算法详解以及java实现源代码

1.Prim算法核心思想 prim算法也是贪婪算法的一个典型例子,有点类似于dijkstra算法。核心思想:将点分为两拨,已经加入最小生成树的,未加入的,找到未加入中距离集合最近的点,添加该点,修改其...
  • tingting256
  • tingting256
  • 2016年01月06日 18:41
  • 3045
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Prim算法C语言实现
举报原因:
原因补充:

(最多只允许输入30个字)