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