列印全排列(DFS)

2022-06-13 10:06:09 字數 1145 閱讀 6346

前言:oj上一道簡單演算法題,列印全排列。用深度優先搜尋(dfs)來實現,順便記錄一下基礎dfs模板。

題目描述

給定乙個正整數n,取出前n小的正整數,即 1~n 這n個數字,將他們全排列,一共有 n!中排列方案,要求輸出全部的排列方案。

輸入乙個n(2 <= n <= 7),輸出 n!個排列方案

演算法思路

使用深度優先搜尋列印排列數,深度優先搜尋基本模型如下:

void

dfs(

int step)

4.返回

}

**實現

下面就結合深度優先搜尋的模板,來實現具體的全排列列印,如下:

/* @author mahuiming

* @date 2020/7/22

* @func 列印全排列(dfs)

*/#include

using

namespace std;

#define numsize 8

class

permutation

void

dfs(

int position)

cout << endl;

}for

(int i =

1; i <= n; i++)}

}~permutation()

private

:/* @param n: 輸入乙個正整數

* @param instance: 儲存乙個排列數

* @param status: 儲存每次排入數字的狀態值

*/int n;

int instance[numsize]=;

int status[numsize]=;

};intmain()

permutation permutate

(n);

permutate.

dfs(1)

;// 從第乙個數字開始排列

return0;

}

程式執行結果如下:

列印全排列

今天碰到乙個打全排列的問題,仔細研究了一下,用遞迴的思想搞出來了,現在把大概思想貼在下面了 假設要列印的是a,b c d e 很明顯應該採用遞迴,遞迴就得有子問題 列印a,b c d e 的問題可以分解成以下幾個子問題 列印a,列印 b c d e 的全排列 列印b,列印 a c d e 的全排列 ...

全排列列印

全排列的要求 輸入 字串 abc 輸出 如下圖示,思路1 全排列的遞迴實現核心思想 比如對於字串 abc 第一步 求所有可能出現在第乙個位置的字元即 a,b,c。使用方法 把第乙個字元和後面的b c字元進行交換。第二步 把第乙個字元後面的所有字元仍然看成兩部分,即後面的第乙個字元及除此之外的其他字元...

列印全排列

第一次嘗試 define crt secure no warnings include include 在被交換的元素前面序列中,如果出現了這個元素,那麼就不必交換了 intjudge int arr,int i,int k return1 int stringrank int arr,int k,...