堆积木(基本数据结构-ArrayList数组的使用)
蒜头君有 n 块积木,编号分别为 1 到 n。一开始,蒜头把第 i 块积木放在位置 i。蒜头君进行 m次操作,每次操作,蒜头把位置 b 上的积木整体移动到位置 a 上面。
比如 1 位置的积木是 1,2位置的积木是 2,那么把位置 2 的积木移动到位置 1 后,位置 1 上的积木从下到上依次为 1,2。
输入格式
第一行输入 2 个整数n,m(1≤n≤10000,0≤m≤10000)。
接下来 m 行,每行输入 2个整数 a,b(1≤a,b≤n),如果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(); } } }