最小生成树prime算法(和Dijkstra算法很类似,除了下面有个地方不同)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string.h>
#include <queue>     //poj1258 最小生成树prime算法(和Dijkstra算法很类似,除了下面有个地方不同)
#include <vector>
#define inf 10000000
using namespace std;  
int n, vis[110], dis[110], map[110][110];
int prime()
{
	int t, j, k, min, sum=0;
	memset(vis, 0, sizeof(vis));
	for(t=0; t<n; ++t)
	{
		dis[t]=map[0][t];
	}
	vis[0]=1;
	for(j=1; j<n; ++j)  //注意,这里少一次循环,因为前面已经选了一个点
	{
		min=inf;
		for(t=0; t<n; ++t)
		{
			if(!vis[t]&&dis[t]<min)
			{
				k=t;
				min=dis[t];
			}
		}
		vis[k]=1;
		sum+=min;
		for(t=0; t<n; ++t)
		{
			if(!vis[t]&&dis[t]>map[k][t])//这里就是和Dijkstra算法不同的地方,Dijkstra算法是时刻和那个单源点相连,而这里保证图联通且权值最小
				dis[t]=map[k][t];
		}
	}
	return sum;
}
int main()
{
	int t, j, s;
	while(scanf("%d", &n)!=EOF)
	{
		for(j=0; j<n; ++j)
		{
			for(t=0; t<n; ++t)
			{
				scanf("%d", &map[j][t]);
			}
		}
		s=prime();
		printf("%d\n", s);
	}
	return 0;
}

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string.h>
#include <queue>     //poj2485 最小生成树prime算法---只是在求最小生成树的过程中记录最大的边
#include <vector>
#define inf 100000000
using namespace std;  
int n, g, vis[510], dis[510], map[510][510];
void prime()
{
	int t, j, k, min, sum=0;
	memset(vis, 0, sizeof(vis));
	for(t=0; t<n; ++t)
	{
		dis[t]=map[0][t];
	}
	g=0;
	vis[0]=1;
	for(j=1; j<n; ++j)  //注意,这里少一次循环,因为前面已经选了一个点
	{
		min=inf;
		for(t=0; t<n; ++t)
		{
			if(!vis[t]&&dis[t]<min)
			{
				k=t;
				min=dis[t];
			}
		}
		vis[k]=1;
		if(g<min)g=min;
		sum+=min;
		for(t=0; t<n; ++t)
		{
			if(!vis[t]&&dis[t]>map[k][t])//这里就是和Dijkstra算法不同的地方,Dijkstra算法是时刻和那个单源点相连,而这里保证图联通且权值最小
				dis[t]=map[k][t];
		}
	}
	return ;
}
int main()
{
	int t, j, T;
	scanf("%d", &T);
	while(T--)
	{
		scanf("%d", &n);
		for(j=0; j<n; ++j)
		{
			for(t=0; t<n; ++t)
			{
				scanf("%d", &map[j][t]);
			}
		}
		prime();
		printf("%d\n", g);
	}
	return 0;
}

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/u012432475/article/details/17055863
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞