标签:
一个很好的ppt:http://wenku.baidu.com/link?url=QyYfqfqfJPapm1ZzHBLdcg3lEEeCQOeCrdFGsNgZl5nJpjAyjYcD6zHx3BmGYR79vjLFZHDKNEuJ0YIcjoBOTJej6hOTndxaltHj15i6s3e
/** 4 2 1 3 4 3 0 1 2 3 4 0 1 2 1 3 */ #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int Set[1010]; int M,N; void Mergel(int a,int b){ int i=min(a,b); int j=max(a,b); for(int k=1;k<=N;k++) { if(Set[k] == j) Set[k]=i; } } int main() { while(scanf("%d",&N),N!=0){ scanf("%d",&M); for(int i=0;i<=N;i++) { Set[i]=i; } while(M--){ int x,y; scanf("%d%d",&x,&y); Mergel(x,y); } for(int i=0;i<=N;i++) { printf("%d ",i); } printf("\n"); for(int i=0;i<=N;i++) { printf("%d ",Set[i]); } } return 0; }
属于一个集合的所代表的值不会归到一类,还是需要查找
/** 4 2 1 3 4 3 0 1 2 3 4 0 1 2 1 3 */ #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int Set[1010]; int M,N; int find2(int x){ int r=x; while(Set[r]!=r) r=Set[r]; return r; } void Mergel(int a,int b){ int i=min(a,b); int j=max(a,b); for(int k=1;k<=N;k++) { if(Set[k] == j) Set[k]=i; } } int main() { while(scanf("%d",&N),N!=0){ scanf("%d",&M); for(int i=0;i<=N;i++) { Set[i]=i; } while(M--){ int x,y; scanf("%d%d",&x,&y); Mergel(x,y); } for(int i=0;i<=N;i++) { printf("%d ",i); } printf("\n"); for(int i=0;i<=N;i++) { printf("%d ",Set[i]); } printf("\n4属于哪一个集合\n"); printf("%d\n",find2(4)); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a197p/article/details/46840201