算法: 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])//感觉是遍历根点的感觉。
id[i] = id[id[i]];//id[id[i]]就是根点,改那个id[i]。
for(j = q; j != id[j]; j = id[j])
id[j] = id[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;
}
增加了两行代码,一直在搞根点, 所以。。。无法用语言描述。。。把全部的值都变成根点的值,但因为for循环所以还不能把全部都变成根点的值,还留下一个。