poj 2485

题意很简单,给你一个用邻接矩阵形式存储的有n个顶点的无向图,让你求它的最小生成树并求出在这个生成树里面最大的边的权值。

思路:最小生成树算法:

代码如下:

#include <iostream>
using namespace std;
const int Max=502;
const int inf=0xfffffff;

int n,ans;
int map[Max][Max],dis[Max];

int min(int a,int b)
{
	return a<b?a:b;
}

void prim()
{
	int i,now,j,min_edge,min_node;
	now=1;
	ans=0;
	for(i=1;i<=n;i++)
		dis[i]=inf;
	for (i=1;i<n;i++)
	{
		dis[now]=-1;
		min_edge=inf;
		for (j=1;j<=n;j++)
			if (j!=now&&dis[j]>=0)
			{
				dis[j]=min(dis[j],map[now][j]);
				if (dis[j]<min_edge)
				{
					min_edge=dis[j];
					min_node=j;
				}
			}
			now=min_node;
			if (min_edge>ans)
				ans=min_edge;
	}
}

int main()
{
	int i,j,t;
	cin>>t;
	while (t--)
	{
		cin>>n;
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				cin>>map[i][j];
			prim();
			cout<<ans<<endl;
	}
	return 0;
}

  关于最小生成树的另外一种算法,未完待续……

你可能感兴趣的:(poj)