现在的位置: 首页 > 综合 > 正文

hdu 1863 畅通工程prim算法

2018年04月26日 ⁄ 综合 ⁄ 共 773字 ⁄ 字号 评论关闭
//prim算法
#include<iostream>
#include<string.h>
using namespace std;
#define data 1000000000
int graph[210][210],n,m,num,lowcost[210],vis[210];
int prim(int s)
{
	int mindata,sum=0,i,j,u;
	num=0;
	memset(vis,0,sizeof(vis));
	for(i=1;i<=m;i++)
	{
		lowcost[i]=graph[s][i];
	}
	lowcost[s]=0;
	vis[s]=1;
	for(i=1;i<m;++i)
	{
		mindata=data;
		for(j=1;j<=m;++j)
		{
			if(!vis[j]&&lowcost[j]<mindata)
			{
				u=j;
				mindata=lowcost[j];
			}
		}
		if(mindata==data)break;
		vis[u]=1;
		sum+=lowcost[u];
		num++;
		for(j=1;j<=m;++j)
		{
			if(lowcost[j]>graph[u][j])
				lowcost[j]=graph[u][j];
		}
	}
	return sum;
}
int main()
{
	int i,j,pa,pb,cost;
	while(cin >> n >> m&&n)
	{
		for(i=0;i<=m;i++)
			for(j=0;j<=m;j++)
				graph[i][j]=data;//注意初始化的时候应该从0开始,否则prim函数里面会报错
		for(i=1;i<=n;i++)
		{
			cin >> pa >> pb >> cost;
			graph[pa][pb]=graph[pb][pa]=cost;
		}
		int x=prim(1);
		if(num!=m-1) cout << '?' << endl;
			else  cout << x << endl;
	}
	return 0;
}

 

抱歉!评论已关闭.