赛码网 IO练习

题目描述

输入
包含多组测试用例。
对于每组测试用例:
第一行包括2个整数,N(1 <= N <= 1000),M(0 <= M <= N*(N-1)/2),代表现有N个人(用1~N编号)和M组关系;

在接下来的M行里,每行包括3个整数,a,b, c,如果c为1,则代表a跟b是同乡;如果c为0,则代表a跟b不是同乡;

已知1表示小赛本人。

代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (true){
            String line=scanner.nextLine();
            int m=Integer.parseInt(line.split(" ")[1]);
            getPerson(stringToGroups(m,scanner));
        }
    }


    public static  void getPerson(String[][]groups){
        List<String> laoxiang=new ArrayList<>();
        laoxiang.add("1");
        int m=groups.length;
        List<Integer> checkRepeat=new ArrayList<>();
        
        //行数的取取值需要遍历两次 从大到小 从小到大
        for(int i=0;i<2*m;i++){            
            int index=i>=m?(2*m-i-1):i;
            System.out.println(index);
            //从下面往回遍历的时候 把是老乡的重复行去除 只看不是老乡的会不会成为老乡
            if (checkRepeat.contains(index)) {
                continue;
            }
            boolean check=groups[index][2].equals("1");
            boolean check2=laoxiang.contains(groups[index][0]);
            boolean check3=laoxiang.contains(groups[index][1]);
            if(check2&&check){
                laoxiang.add(groups[index][1]);
                checkRepeat.add(index);
            }
            if(check3&&check){
                laoxiang.add(groups[index][0]);
                checkRepeat.add(index);
            }
        }
        System.out.println(laoxiang.size()-1);
    }


    public static String[][] stringToGroups(int m,Scanner scanner){
        String[][]groups=new String[m][3];
        for(int i=0;i<m;i++){
            String[]group=scanner.nextLine().split(" ");
            for(int j=0;j<group.length;j++){
                groups[i][j]=group[j];
            }
        }
        return groups;
    }
}

版权声明:本文为weixin_50088096原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。