算法: C语言实现笔记
#include "stdafx.h"
#include <STDIO.H>
#define N 10
int main(int argc, char* argv[])
{
int i, j, p, q, id[N], sz[N];
for (i = 0; i < N; i++)
{
id[i] = i;
sz[i] = 1;//初始化1,这是权
}
while(scanf("%d %d", &p, &q) == 2)
{
for(i = p; i != id[i]; i = id[i]);//感觉是遍历根点的感觉。
for(j = q; j != id[j]; j = id[j]);
if (i == j) continue;//大家有相同的根点就continue;
if (sz[i] < sz[j])
{
id[i] = j;//感觉是用id[j]的值改成id[j]的值。
sz[j] += sz[i];//增加大树的节点数
}
else
{
id[j] = i;
sz[i] += sz[j];
}
for (i = 0; i < N; i++)
{
printf(" %d ", id[i]);
}
}
return 0;
}
加权后树的分布均匀了,增加查找效率?但已经覆盖了,到底是查找什么?这个程序意义不明,纯属用来学习。