我想求教一个概念:所谓的压缩路径 , 是不是就是把所有元素的下标都指向根?
我试了一下压缩路径,貌似不是所有元素都指向根啊?#include<stdio.h>
int m,p[10000010];
void Make_set()
{
int i;
for(i=0; i<10000010; i++)
{
p[i]=i;
}
}
int Find_set(int x)
{
if(p[x]!=x)
p[x]=Find_set(p[x]);
return p[x];
}
void Union(int x,int y)
{
p[x]=y;
}
int main(){
// freopen ("a.txt" , "r" , stdin ) ;
int x,y,i;
int n ;
while(scanf("%d",&m)!=EOF)//边数
{
Make_set();
n = 0 ;//顶点数
for(i=0; i<m; i++)
{
scanf("%d%d",&x,&y);
x=Find_set(x);
y=Find_set(y);
if(x!=y)
Union(x,y);
x = x > y ? x : y ;
n = n > x ? n : x ;
}
for ( int i = 1 ; i <= n ; i++ )
printf ("%d " , p[i] ) ;
puts ("") ;
}
return 0 ;
}
/*测试数据
4
1 2
3 4
5 6
1 6
4
1 2
3 4
5 6
7 8
5
1 5
6 7
5 6
2 3
2 4
*/
输出:
2 6 4 4 6 6
2 2 4 4 6 6 8 8
5 3 4 4 7 7 7