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算法

贪婪技术与Prim算法

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

Prim算法涉及到几个基本的概念

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

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

LinCode-第181题 将整形A转换为B

如果要将整数A转换为B,需要改变多少个bit位?

经典Prim算法题目及代码

经典Prim算法题目及代码 Prim算法是解决最小生成树的经典算法(尤以稠密图效率很高),现对这样一道简单最小生成 题目给出完整代码(有注释)。 输入n和m,代表n个节点,m条边,然后是m行输入,每行...

C语言实现prim算法

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

Prim算法最小生成树(C语言)

  • 2014年10月16日 16:31
  • 516B
  • 下载

最小生成树Prim算法朴素版 C语言实现

代码的注释我写得很详细,方便理解,有几点需要说明一下。 1、2个for循环都是从2开始的,因为一般我们默认开始就把第一个节点加入生成树,因此之后不需要再次寻找它。 2、lowcost[i]...

最小生成树—— Prim算法 ▪ Kruskal算法C语言实现

在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得 的 ...

Prim算法的C语言程序

Prim算法是有关图的最小生成树的算法。1957年由美国计算机科学家罗伯特·普里姆(Robert C. Prim)独立发现。 百度百科:Prim算法。 维基百科:Prim's Algorithm。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Prim算法C语言实现
举报原因:
原因补充:

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