數的全排列(深度優先搜尋)學習筆記

2021-10-02 11:56:29 字數 896 閱讀 6084

先來簡單介紹一下全排列,全排列就是將給出的資料按照不同的組合進行排列。例如12的全排列就是12,21.

123的全排列就是123,132,231,213,321,312.

1234的全排列就是1234,1243,1324,1342,1432,2134,2143,2314,2341,2413,2431,3124,3142,3214,3241,3412,3421,4123,4132,4213,4231,4312,4321

要寫出這幾種資料的全排列非常簡單,例如123

#include

#include

intmain()

return0;

}

但當給的數字很大或是不確定,這種寫法將非常麻煩,這個時候我們可以用搜尋的方法

void

dfs(

int step)

返回}

我們可以將此過程想象為將不同序號紙牌依次放入盒子

#include

int a[10]

,book[10]

,n;//全域性變數預設為零

void

dfs(

int step)

//step表示站在第幾個盒子前

printf

("\n");

return

;//返回最近一次呼叫dfs函式的地方

}for

(i=1

;i<=n;i++)}

return;}

intmain()

一定要注意的是,我們在定義函式時實際上是定義了一種操作,在進行遞迴時,」遞「的這一過程執行的都是同一種操作,當return 回來時改變的其實是此時的資料,但操作始終不變。

全排列(深度優先搜尋)

description 列出所有數字1到數字n的連續自然數的排列,要求所產生的任一數字序列中不允許出現得復數字。input 輸入 n 1 n 9 output 由1 n組成的所有不重複的數字序列,每行乙個序列。sample input 3 sample output 1 2 3 1 3 2 2 1 ...

深度優先搜尋 全排列

題目要求 輸入乙個數n,輸出1 n的全排列。比如,輸入3,輸出123 132 213 231 312 321。解題思路 用深度優先搜尋,假設有n個盒子,從第乙個盒子開始依次放直到放到最後乙個盒子,期間用到遞迴呼叫。放到最後乙個後,再依次返回,進行重新組合,其中還用到標記陣列來判斷是否被用過。實現 i...

深度優先搜尋(DFS) 全排列

題目描述 對於自然數n 按字典序輸出由1 n組成的所有不重複的數字序列,每行乙個序列,每個數字之間有乙個空格。例子 輸出 1 2 2 1例子 輸出1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 思路解析 猛一看上題跟dfs沒什麼關係,也沒有圖給我們搜尋,其實對於一道題,最難的...