分类: C/C++
2009-07-13 00:25:38
题意:求一个无向图中所有的生成树的最大权值边与最小权值边的差值的最小值。
思路:Kruskal
设某棵生成树的最大权值边为maxWeight[i],最小权值边为minWeight[i].答案smallest = min(maxWeight[i] - minWeight[i]);
==》求所有的生成树。
(1)对所有的边按权值从小到大进行排序。
(2)对[i, m - 1]条边求最小生成树,记录maxWeight, minWeight(0 <= i <= m - 1).如果不能组成生成树,则接下来的从[i + 1, m - 1] ,[i + 2, m - 1] .....也不可能有生成树了。
(3) smallest = min(maxWeight - minWeight),即为所求;
源代码:
#include
#include
using namespace std;
const int INF = 999999999;
const int MaxNode = 100;
const int MaxEdge = MaxNode * MaxNode / 2;
struct Edge {
}edge[MaxEdge];
int p[MaxNode + 1], rank[MaxNode + 1];
void makeSet(int n) //并查集初始化
{
}
int findSet(int x)//寻找结点X所在集合的根
{
}
void unionSet(int x, int y)//合并两个集合
{
}
int main()
{