并查集——案例(畅通工程)

该篇博客介绍了一个Java程序,通过读取输入文件`traffic_project.txt`来处理城市交通网络。程序首先创建一个并查集对象,然后根据文件中的道路连接信息,使用并查集的`union`方法连接城市,最后计算并输出还需要修建多少条道路才能使所有城市畅通。

1.问题引入:
在这里插入图片描述
2.编码实现:

package UnionFindAsseble;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TrafficProjectTest {
      public static void main(String[] args) throws Exception {
		//构建一个缓冲读取流BufferedReader
    	  BufferedReader rd=new BufferedReader(new InputStreamReader(TrafficProjectTest.class.getClassLoader().getResourceAsStream("traffic_project.txt")));
    	  
    	  //读取第一行数据20
    	  int cities=Integer.parseInt(rd.readLine());
    	  //构建一个并查集对象
    	  UF uf=new UF(cities);
    	  //读取第二行数据7
    	  int roads=Integer.parseInt(rd.readLine());
    	  //循环读取7条道路
    	  for(int i=1;i<=roads;i++){
    		  //读取每一条道路
    		  String line=rd.readLine();
    		  //通过空格堆读取到的字符串line进行分割,将分割后的数据存入数组str中
    		  String[] str=line.split(" ");
    		  //将城市存入并查集
    		  //p为第一个城市
    		  int p=Integer.parseInt(str[0]);
    		  //q为第二个城市
    		  int q=Integer.parseInt(str[1]);
    		  //调用并查集对象的union方法让两个城市相通
    		  uf.union(p, q);
    	  }
    	  
    	  //获取当前并查集中分组的数量-1即可求得还需修建的道路条数
    	  int answer=uf.count()-1;
    	  System.out.println("还需要修建"+ answer+"条道路才能实现畅通");
	}
}

3.运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值