poj 1258: Agri-Net

解題思路:

prim算法求解最小生成樹

#include<iostream>
#include<cstring> 
using namespace std;

const int inf = 1<<30;

int main()
{
	int n;
	int dis[110][110];
	int linkTown[110];	//標記已連接的城鎮 
	int linkNum;		//已連接的城鎮數 
	
	while(cin>>n)
	{
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				cin>>dis[i][j];
			
		memset(linkTown,0,sizeof(linkTown));
		linkTown[1] = 1;
		linkNum = 1;
		int ans = 0;
	
		while(linkNum<n)
		{
			int maxd = inf;
			int p,q;
			for(int i=1;i<=n;i++)
				for(int j=1;j<=n;j++)
					if(linkTown[i]==1 && linkTown[j]==0 && dis[i][j]<maxd)
					{
						maxd = dis[i][j];
						p = i;
						q = j;	
					}
			linkTown[q] = 1;
			linkNum ++;
			ans += dis[p][q];
		}
		cout<<ans<<endl;
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章