全排列问题(洛谷P1706题题解,Java语言描述)
生活随笔
收集整理的這篇文章主要介紹了
全排列问题(洛谷P1706题题解,Java语言描述)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目要求
題目鏈接
分析
其實應該用DFS啦,打表還是免了,9!9!9!警告。
怎么搜呢?一個boolean數組+一個int數組,int數組按順序存每一位的數值,boolean數組的index對應實際數值,而true表示已被使用。
一旦搜到的used[i]是true,那就剪枝,確實沒有搜的必要了。
AC代碼(Java語言描述)
import java.util.Scanner;public class Main {private static StringBuilder result = new StringBuilder();private static int num;private static int[] sequence;private static boolean[] used;private static void dfs(int k) {if (k == num) {for (int j = 1; j <= num; j++) {result.append(' ').append(' ').append(' ').append(' ').append(sequence[j]);}result.append('\n');return;}for (int i = 1; i <= num; i++) {if (!used[i]) {used[i] = true;sequence[k+1] = i;dfs(k+1);used[i] = false;}}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);num = scanner.nextInt();scanner.close();sequence = new int[num+1];used = new boolean[num+1];dfs(0);System.out.print(result);}} 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的全排列问题(洛谷P1706题题解,Java语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java】JDBC连接MySQL驱动
- 下一篇: 逆序对(洛谷P1908题题解,Java语