JAVA实现动脑子认老乡

赛码网专题动脑子认老乡
大学的同学来自全国各地,对于远离家乡步入陌生大学校园的大一新生来说,碰到老乡是多么激动的一件事,于是大家都热衷于问身边的同学是否与自己同乡,来自新疆的小赛尤其热衷。但是大家都不告诉小赛他们来自哪里,只是说与谁是不是同乡,从所给的信息中,你能告诉小赛有多少人确定是她的同乡吗?

import java.util.*;
public class Main {
	public static void main(String[] args) {
    	Scanner s  = new Scanner(System.in);
        int a = 0;
        int b = 0;
        int c = 0;
        int m = 0;
        int n = 0;
        int i = 0;
        int num = 0;
        while(s.hasNext())
        {
        		m = s.nextInt();
                n =s.nextInt();
                int[][] f = new int[n][3];
                ArrayList<Integer> ne = new ArrayList<>(); 
                Set<Integer> fam = new HashSet<>();
                ArrayList<Integer> newne = new ArrayList<>();
                fam.add(1);
                ne.add(1);
                newne.add(1);
                for( i=0 ; i<n ; i++ ){
                    a = s.nextInt();
                    b = s.nextInt();
                    c = s.nextInt();
                    f[i][0] = a;
                    f[i][1] = b;
                    f[i][2] = c;
                }
                
                while(!newne.isEmpty()){  //isEmpty()妙用
                	ne.clear();
                	ne.addAll(newne);
                	newne.clear();//clear()清空列表
                	
                    for(i=0;i<n;i++){
                     if(f[i][2]==1){ 
                     if(ne.contains(f[i][0])&&!fam.contains(f[i][1])){
                     fam.add(f[i][1]);
                     ne.add(f[i][1]);
                     newne.add(f[i][1]);
                     }
                     else if(ne.contains(f[i][1])&&!fam.contains(f[i][0])){
                     fam.add(f[i][0]);
                     ne.add(f[i][0]);
                     newne.add(f[i][0]);
                     }
                     }  
                    }  
                }
                
                System.out.println(fam.size()-1);
                }
            }
}

错题记:
Set fam = new HashSet<>();
在新建一个集合时,如果是int集合,里面要写Integer而不是int。
Set和ArrayList都可以用add(),contains()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值