什么是连通性,请自行百度。
我是从Robert Sedgewick所著《C算法(第一卷 基础、数据结构、排序和搜索)》中看到的,加了自己的一点儿注释,如果看不懂的话可以Q我,提供免费指导。
// 名称——连通性问题的快速查找解决方案
// 作者——来智慧<3552743712@qq.com>
// 学校——河北大学
// 时间——2016年10月8日
#include <stdio.h>
int main(void)
{
int array[10];
int i;
int p, q;
int t;
// 给数组填充0~9
for(i = 0; i < 10; i++){
array[i] = i;
}
// 输入两个0~9之间的数,判断其连通性
while(1){
scanf("%d %d", &p, &q);
// 如果p位置的数值=q位置的数值,说明两数互连,跳出循环
if(array[p] == array[q]){
continue;
}
else{
// 不相等,则证明不连通,将p位置的数取出保存于变量t,
// 然后遍历数组,找到所有与array[p]数值相等的位置
// 将该位置的数值更改为array[q]
for(t = array[p], i = 0; i < 10; i++){
if(array[i] == t){
array[i] = array[q];
}
}
// 将不互连的两数打印出来,连通的两数跳过
printf("%d %d\n", p, q);
}
}
return 0;
}