最小生成ツリー-最小ウェイト値

1830 ワード

二つの方法
1.kruskal:集計エッジ格納方式:隣接テーブル時間複雑度:O(eloge)適用:疎網
2.Primアルゴリズム:集計点記憶方式:マトリックス時間複雑度:O(n^2)適合:稠密網
(1)Kruskal
SL:エッジを小さい順に並べ替え,親ノードが同じかどうかを判断することにより,異なる集計可能,集計回数n−1
/*
Kruskal:     
  :   ; 
*/
#include
#include
using namespace std;
const int Max=10005; 
struct Node
{
	int u,v;
	int w;
}e[Max];
int fa[Max];
int cnt=0;
bool cmp(Node a,Node b)
{
	return a.w>n>>m;
   init(n);
   cout<>e[i].u>>e[i].v>>e[i].w;
   }
   //    
   sort(e+1,e+1+m,cmp);	
   cout<

(2)Prim
/*
**     :
  :       
**    :
1.    
**  :
1.Prim 
2.Kruscal 
*/
#include
using namespace std;
const int Max=10005;
const int INF=99999999; 
int mp[Max][Max];
int path[Max];
int dis[Max],vis[Max]; 
int cnt=0;
int Prim(int n)
{
	cout<dis[j]&&!vis[j])
		  {
		  	Min=dis[j];
		  	p=j;
		  }	
		}
		vis[p]=1;
		sum+=dis[p];
		path[++cnt]=p;
		for(int k=1;k<=n;k++)
		{
			if(dis[k]>mp[p][k])
			dis[k]=mp[p][k];
		}
	}
	return sum;
}
int main()
{
	int n,m,u,v,vl,c;
	cout<>c;
	if(c==2)
	{
  	cout<>n>>m;
    
	}
	else
	{
		n=3,m=3;
	}
  	//    
  	for(int i=1;i<=n;++i)
  	{
  	  for(int j=1;j<=n;j++)
  	  mp[i][j]=INF;
	} 
	if(c==2)
	{
	cout<>u>>v>>vl;
	 if(mp[u][v]>vl)
	 mp[u][v]=mp[v][u]=vl;//            。     
	} 
    }
    else
    {
	 mp[1][2]=mp[2][1]=1;
	 mp[2][3]=mp[3][2]=1;
	 mp[1][3]=mp[3][1]=4;	
	}
	int sum=Prim(n);
	cout<";
    }
	cout<"<