堆积木(基本数据结构-ArrayList数组的使用)

蒜头君有 n 块积木,编号分别为 1 到 n。一开始,蒜头把第 i 块积木放在位置 i。蒜头君进行 m次操作,每次操作,蒜头把位置 b 上的积木整体移动到位置 a 上面。

比如 1 位置的积木是 12位置的积木是 2,那么把位置 2 的积木移动到位置 1 后,位置 1 上的积木从下到上依次为 1,2

输入格式

第一行输入 2 个整数n,m(1n10000,0m10000)。

接下来 m 行,每行输入 2个整数 a,b(1a,bn),如果a,b 相等则本次不需要移动。

输出格式

输出 nn 行,第 ii 行输出位置 ii 从下到上的积木编号,如果该行没有积木输出一行空行。

样例输入1

2 2
1 2
1 2

样例输出1

1 2

样例输入2

4 4
3 1
4 3
2 4
2 2

样例输出2

2 4 3 1
package 计蒜客;

import java.util.ArrayList;
import java.util.Scanner;

public class 堆积木 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int m=scan.nextInt();
        ArrayList<Integer>[] als=new ArrayList[n+1];
        for(int i=1;i<=n;i++){
            als[i]=new ArrayList<Integer>();
            als[i].add(i);
        }
        int[][] arr=new int[m][2];
        for(int i=0;i<m;i++){
            arr[i][0]=scan.nextInt();//记录a位置
            arr[i][1]=scan.nextInt();//记录b位置
        }
        for(int i=0;i<m;i++){
            int a=arr[i][0];
            int b=arr[i][1];
            if(a!=b){
                als[a].addAll(als[b]);//把b位置的所有元素给a位置
                als[b].clear();
            }
            
        }
        //System.out.println("==================================");
        for(int k=1;k<=n;k++){//输出所有的位置上的元素
            for(int j=0;j<als[k].size();j++){
                System.out.print(als[k].get(j));
                if(j!=als[k].size()-1){
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
        
    }

}

 

posted @ 2018-03-18 19:07  henu小白  阅读(652)  评论(0编辑  收藏  举报