zoj 1586 QS net (简单-MST)

第一道prim==

还不熟练啊,仍然要设2个辅助数组==

昨天wa了数次就没做了,今天把从1开始改成从0开始果断a了啊。

-----

#include<iostream>
#include<cstdlib>
#include<cstring>
#define INF 10000000
#define MAXN 1005
using namespace std;
int n;
int Edge[MAXN][MAXN];
int lowcost[MAXN];
int nearvex[MAXN];
int sum;
void prim(int u0)
{
	int i,j;
	memset(lowcost,0,sizeof(lowcost));
	for(i=0;i<n;i++)
	{
		lowcost[i]=Edge[u0][i];
		nearvex[i]=u0;
	}
	nearvex[u0]=-1;
	for(i=0;i<n;i++)
	{
		int min=INF;
		int v=-1;
		for(j=0;j<n;j++)
		{
			if(nearvex[j]!=-1&&lowcost[j]<min)
			{v=j;min=lowcost[j];}
		}
		if(v!=-1)
		{
			nearvex[v]=-1;
			sum+=lowcost[v];
			for(j=0;j<n;j++)
			{
				if(nearvex[j]!=-1&&Edge[v][j]<lowcost[j])
				{
					lowcost[j]=Edge[v][j];
					nearvex[j]=v;
				}
			}
		}
	}
	cout<<sum<<endl;
}
int main()
{
	int t;
	int price[MAXN];
	int i,j;
	cin>>t;
	while(t--)
	{
		cin>>n;
		sum=0;
		for(i=0;i<n;i++)
			cin>>price[i];
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)
			{
				cin>>Edge[i][j];
				if(i==j) Edge[i][j]=INF;
				else 
				Edge[i][j]+=price[i]+price[j];
			}
		}
		prim(0);
	}
	return 0;
}

---去了趟玉山,发现很多我怀念的东西都早已破碎的一干二净,以为没变的都变了==我也已不是当年那个小男孩了

你可能感兴趣的:(zoj 1586 QS net (简单-MST))