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;
    }
    勤能补拙,熟能生巧
  • 相关阅读:
    html websocket
    使用公钥进行远程登录主机/远程执行命令
    cropper.js 跨域问题
    利用PhantomJS生成网站截图
    Windows下的MySQL删除data文件夹后……
    快速设置环境变量
    压缩JS时生成source_map
    调试android chrome web page简明备忘
    CURL 简介【转载】
    一些同形异码字符
  • 原文地址:https://www.cnblogs.com/snzhong/p/12441514.html
Copyright © 2011-2022 走看看