题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
import java.util.*; //bfs public class Main{ static Set<String> result = new HashSet<>(); static int[] id; static ArrayDeque<ifBranch> queue = new ArrayDeque<>(); public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); id = new int[n]; for (int i = 0; i < n; i++) { id[i] = sc.nextInt(); } ifBranch start = new ifBranch(0, new Stack<>(), new ArrayList<>()); queue.add(start); bfs(start); result.stream().sorted(String.CASE_INSENSITIVE_ORDER).forEach(System.out::println); } public static void bfs(ifBranch branch){ if(branch.index == id.length){ while (branch.integers.size()>0){ branch.res.add(branch.integers.pop()); } StringBuilder sb = new StringBuilder(); for (int i = 0; i < branch.res.size(); i++) { if(i != branch.res.size()-1){ sb.append(branch.res.get(i)).append(" "); } else { sb.append(branch.res.get(i)); } } result.add(sb.toString()); } if (branch.index< id.length) { try{ ifBranch ifPop = new ifBranch(branch.index); ifPop.integers = new Stack<>(); ifPop.res = new ArrayList<>(); ifPop.integers.addAll(branch.integers); ifPop.res.addAll(branch.res); Integer pop = ifPop.integers.pop(); ifPop.res.add(pop); queue.add(ifPop); }catch (Exception e){} ifBranch ifPush = new ifBranch(branch.index+1); ifPush.integers = new Stack<>(); ifPush.res = new ArrayList<>(); ifPush.integers.addAll(branch.integers); ifPush.res.addAll(branch.res); ifPush.integers.push(id[branch.index]); queue.add(ifPush); } queue.remove(branch); if(queue.size()>0){ bfs(queue.element()); } } static class ifBranch{ int index; Stack<Integer> integers; List<Integer> res; public ifBranch(int index, Stack<Integer> integers, List<Integer> res) { this.index = index; this.integers = integers; this.res = res; } public ifBranch(int index) { this.index = index; } } }