zoukankan      html  css  js  c++  java
  • 案例4-1.7 文件传输 (25分)--并查集

     

     

     解题思路:(并查集)

    1、初始化结点各自成一个单元子集合数组

    2、将连通的结点放入同一个集合

    #include <stdio.h>
    typedef enum {false,true
                 } bool;
    int f[10001];
    void Init(int f[],int n) {//初始化结点各自成单元素子集合
    	int i;
    	for(i=1; i<=n; i++) {
    		f[i]=i;
    	}
    }
    int getf(int x) {//获取根结点
    	if(f[x]==x)
    		return x;
    	else return  f[x]=getf(f[x]);
    }
    
    void Union(int f[],int x,int y) {//连通的结点并入同一个集合
    	int f1=getf(x);
    	int f2=getf(y);
    	if(f1!=f2) {
    		f[f2]=f1;
    	}
    }
    bool Check_connect(int f[],int x,int y) {//查找是否在同一个集合(即根是否是相同)
    	if(getf(x)==getf(y))
    		return true;
    	return false;
    }
    int main() {
    	int n;
    	scanf("%d",&n);
    	Init(f,n);
    	getchar();
    	char c=getchar();
    	int x,y;
    	while(c!='S') {
    		getchar();
    		scanf("%d %d",&x,&y);
    		if(c=='I') {
    			Union(f,x,y);
    		} else if(c=='C') {
    			if(Check_connect(f,x,y)) {
    				printf("yes
    ");
    			} else
    				printf("no
    ");
    		}
    		getchar();
    		c=getchar();
    	}
    	int cnt=0;
    	int i;
    	for(i=1; i<=n; i++) {//获取连通集个数
    		if(f[i]==i)
    			cnt++;
    	}
    	if(cnt!=1)printf("There are %d components.",cnt);
    	else printf("The network is connected.");
    	return 0;
    }
    勤能补拙,熟能生巧
  • 相关阅读:
    几何画板表现两集合的差集的教程
    MathType如何编辑大三角形符号
    几何画板如何绘制动态正切函数图像
    MathType如何设置标尺的单位
    模拟按键
    oauth2.0
    PHP CURL POST提交
    Eclipse导入到web项目没有run on server
    实时刷新
    js 实时数据显示
  • 原文地址:https://www.cnblogs.com/snzhong/p/12441514.html
Copyright © 2011-2022 走看看