⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kruskal.cpp

📁 西电的VC++课上的几个通用模板,完全是可用的
💻 CPP
字号:
#include <iostream>
#include <fstream>
#include <algorithm>
#include "UnionFindSet.h"

using namespace std;

fstream fin("in.txt",ios::in);
#define cin fin
#define MAX 512

struct Edge
{
	int b,e,w;
}*edge,*path;

bool small(Edge a, Edge b)
{
	return a.w<b.w;
}

int edgeNum;
int vertexNum;

UnionFindSet unionFindSet;

void Kruskal();
void Read();
void Print();

int main()
{
	Read();
	Kruskal();
	Print();
	delete edge;
	delete path;
	return 0;
}

void Kruskal()
{
	unionFindSet.Initialize(50000);
	sort(edge,edge+edgeNum,small);

	int a,b;
	int j=0;
	for (int i=0; i<edgeNum; i++)
	{
		if (j == vertexNum)
			break;
		
		a = unionFindSet.Find(edge[i].b);
		b = unionFindSet.Find(edge[i].e);

		if (a!=b)
		{
			unionFindSet.SetUnion(a,b);
			path[j++] = edge[i];
		}
	}
}

void Read()
{
	cin>>vertexNum;
	cin>>edgeNum;
	path = new Edge[vertexNum];
	edge = new Edge[edgeNum];
	int i;
	for(i=0; i<edgeNum; i++)
		cin>>edge[i].b>>edge[i].e>>edge[i].w;
}

void Print()
{
	//sort(path, path+vertexNum, small);
	cout<<path[vertexNum-1].w<<endl;
	cout<<vertexNum-1<<endl;
	for(int i = 0; i < vertexNum; i++)
	{
		cout<<path[i].b<<' '<<path[i].e<<endl;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -