对于“连通问题的快速查找算法”的疑问
这个问题从标准输入读取小于N的非负整数对序列(对p-q表示“把对象B连接到q”),并且输出还未连通的输入对。程序中使用数组id,每个元素表示一个对象,且具有以下性质,当且仅当p和q是连通的,id[p]和id[q]相等为简化起见,定义N为编译时的常数。另一方面,也可以从输入得到它,并动态地为它分配id数组。#include <stdio.h>
#define N 10000
int main(void)
{
int i, p, q, t, id[N];
for (i = 0; i < N; i++)
id[i] = i;
while (scanf("%d %d\n", &p, &q)) {
if (id[p] == id[q])
continue;
for (t = id[p], i = 0; i < N; i++)
if (id[i] == t)
id[i] = id[q];
printf(" %d %d\n", p, q);
}
return 0;
}
------------------------------------------------------------------------------------------------
我是刚开始学习算法与数据结构的,这个算法程序配合书上的具体实例输入也大致可以弄懂。但是感觉这种使用数组的方式在实际没多少用途,因为数组原本存储数据的空间用来存储数组的下标信息,也导致程序看起来特别费劲。求大虾们给小弟解释一下这种算法和数据结构的使用方式具体有些什么实际用处。如果可能的话最好能用结构体(链表)来代替数组把程序改进一下。