Prim 算法 最小生成树 图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weifenglin1997/article/details/82229922

Prim 算法 

#include<iostream>
#include<cstdio> 
using namespace std;
//Prinm构造最小生成树算法
/*
算法采用邻接矩阵的方法保存 图
以下为图的领接矩阵表 
0 6 1 5 32767 32767
6 0 5 32767 3 32767
1 5 0 5 6 4
5 32767 5 0 32767 2
32767 3 6 32767 0 6
32767 32767  4 2 6 0
 
*/ 

#define INF 32767

#define MAXV 100
typedef struct 
{
	int edges[7][7]; 
	int n;//节点数 
	int v;//边数 
 }MGraph;
void prim(MGraph g,int v){
	int lowcost[50];
	int closest[50];
	int min,i,j,k;
	for(i=0;i<g.n;i++){
		lowcost[i]=g.edges[v][i];
		closest[i]=v;
	}
	for(i=0;i<g.n;i++){
		min=32767;
		for(j=0;j<g.n;j++){
			if(lowcost[j]!=0&&lowcost[j]<min){
				min=lowcost[j];
				k=j;
			}
		}
		printf("边(%d,%d)权为:%d\n",closest[k],k,min);
		lowcost[k]=0;//标记k已加入队列U
		for(j=0;j<g.n;j++){
			if(g.edges[k][j]!=0&&g.edges[k][j]<lowcost[j])
                   lowcost[j]=g.edges[k][j];
				   closest[j]=k;			
		} 
		
		
	}
} 
int main(){
	int gn ,edx;
	cin>>gn;
	MGraph g;
	for(int i=0;i<gn;i++){
		for(int j=0;j<gn;j++){
			cin>>g.edges[i][j];
		}
	}
	g.n=6;
	g.v=10;
    prim(g,0);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weifenglin1997/article/details/82229922