水题 kruskal算法求最小生成树

时间限制: 
10000ms 
单个测试点时间限制: 
1000ms 
内存限制: 
65536kB
描述

要求对一个图使用kruskal算法求最小生成树,依次输出选出的边所关联的顶点序列,要求下标较小者在前,如图所示,其顶点序列为1 3 4 6 2 5 3 6 2 3水题 kruskal算法求最小生成树_第1张图片

输入
若干行整数
第一行为两个整数,分别为图的顶点数和边数
第二行开始是该图的邻接矩阵,主对角线统一用0表示,无直接路径的两点用100来表示(保证各边权值小于100)
输出
若干用空格隔开的整数
样例输入
6 10
0 6 1 5 100 100
6 0 5 100 3 100
1 5 0 5 6 4
5 100 5 0 100 2
100 3 6 100 0 6
100 100 4 2 6 0
样例输出

1 3 4 6 2 5 3 6 2 3




 #include "iostream"
#include "deque"
#include "algorithm"
using namespace std;
#define Max 100
 
int Father[Max];

int Find(int x)  //查
{
   if(x==Father[x]) return x;
   else  return Find(Father[x]);
}
void Union(int x,int y)  //并
{
	Father[x]=y ;
}

int Top,Edge;
struct Node
{
	int Next;
	int Weight;
	int Priority;
};
bool Com(Node x,Node y)
{
   
	 return x.WeightMap;

int main()
{    
	  
      //cin>>Top>>Edge && Top!=0
	   
		//freopen("1.txt","r",stdin);
		 cin>>Top>>Edge;
		int i,j;
		Node y;
		for(i=1;i<=Top;i++)
		for(j=1;j<=Top;j++)
		{
             int x;
			 cin>>x;
			 if(j>i && x!=100)
			 {
				y.Next=j;
	            y.Priority=i;
            	y.Weight=x;
			    Map.push_back(y);
			 }
		}
        sort(Map.begin(),Map.end(),Com);
        
		for(i=1;i<=Top;i++)
		{ 
           Father[i]=i;
		}

          
		int count=0;
		for(i=0;iMap[i].Next)
				 cout<


你可能感兴趣的:(水题 kruskal算法求最小生成树)