ネットワーキング(プリムアルゴリズム)

 ネットワーキング(プリムアルゴリズム)

広域の特定のポイント間のネットワーク接続を設計するように割り当てられています。エリア内の一連のポイントと、ポイントのペアを接続する可能性のあるケーブルの一連の可能なルートが提供されます。2つのポイント間の可能なルートごとに、そのルートでポイントを接続するために必要なケーブルの長さが与えられます。与えられた2つのポイント間に多くの可能なルートが存在する可能性があることに注意してください。与えられた可能なルートは、エリア内の各2ポイントを(直接的または間接的に)接続すると想定されます。
あなたの仕事は、エリアのネットワークを設計することです。これにより、2つのポイントごとに接続(直接または間接)があり(つまり、すべてのポイントが相互接続されますが、必ずしも直接ケーブルで接続されている必要はありません)、使用するケーブルは最小限です。

入力

入力ファイルは、いくつかのデータセットで構成されています。各データセットは、1つの必要なネットワークを定義します。セットの最初の行には2つの整数が含まれています。1つ目は指定されたポイントの数Pを定義し、2つ目はポイント間の指定されたルートの数Rを定義します。次のR線は、ポイント間の指定されたルートを定義し、それぞれが3つの整数を示します。最初の2つの数字はポイントを識別し、3番目はルートの長さを示します。数字は空白で区切られています。1つの数値P = 0のみを与えるデータセットは、入力の終わりを示します。データセットは空の行で区切られます。
ポイントの最大数は50です。特定のルートの最大長は100です。可能なルートの数は無制限です。ノードは、1からP(両端を含む)までの整数で識別されます。2点iとjの間のルートは、ijまたはjiとして指定できます。

出力

データセットごとに、設計されたネットワーク全体に使用されるケーブルの全長を示す1つの数字を別々の行に印刷します。

サンプル入力

1 0

2 3
1 2 37
2 1 17
1 2 68

3 7
1 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32

5 7
1 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12

0

サンプル出力

0
17
16
26

スポンサー

 アイデア:

プリムアルゴリズムによって解決された適切な最小全域木問題

実装コード:

 

#include<stdio.h>
#include<string.h>
#include<algorithm>

using namespace std;

int inf=0x3f3f3f;
int map[100][100],dis[100],book[100];
int m,n;

int prim()
{
	int i,j,k,sum=0,u,min;
	
	for(i=1;i<=n;i++)//循环范围根据题目从1开始 ,这里初始化一下 
	{
		dis[i]=map[1][i];//表示原点到其他点的距离 
		book[i]=0;
	}
	book[1]=1;
	//dis[1]=0;
	
	for(i=1;i<n;i++)
	{
		min=inf;
		for(j=1;j<=n;j++)
		{
			if(book[j]==0&&min>dis[j])
			{
				min=dis[j];
				u=j;
			}
		}
		book[u]=1;
		sum+=dis[u];
		
		for(j=1;j<=n;j++)
		{
			if(book[j]==0&&dis[j]>map[u][j])
			dis[j]=map[u][j];
		}
	}
	return sum;
}

int main()
{
	int a,b,c,i,j,k;
	
	while(scanf("%d",&n),n!=0)
	{
		memset(map,inf,sizeof(map));//初始化一下 
		scanf("%d",&m);
		for(i=1;i<=m;i++)//输入地图 
		{
			scanf("%d%d%d",&a,&b,&c);
			if(map[a][b]>c||map[b][a]>c)
			{
				map[a][b]=map[b][a]=c;
			}
		}
		
		printf("%d\n",prim());
	}
	return 0;
}

注意:

入力に入力された同じ2点間の距離が小さい場合は、入力マップを更新する必要があります

知らない人のために、あなたはこれを最初に見ることができます:https//blog.csdn.net/with_wine/article/details/113972924基礎を築く

おすすめ

転載: blog.csdn.net/with_wine/article/details/114548338