dfs全排列問題

2021-09-26 06:14:29 字數 1254 閱讀 8858

全排列問題,不是計算全排列a,是把全排列列印出來,這也是dfs的一道入門題目,值得學習。

問題 a: 【遞迴入門】全排列

題目描述

排列與組合是常用的數學方法。

先給乙個正整數 ( 1 < = n < = 10 )

例如n=3,所有組合,並且按字典序輸出:

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

輸入輸入乙個整數n( 1<=n<=10)

輸出輸出所有全排列

每個全排列一行,相鄰兩個數用空格隔開(最後乙個數後面沒有空格)

樣例輸入

3樣例輸出

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

題解:題目很明顯是讓你求全排列,很多人第一想到列舉,怎麼列舉是個問題,我也是看dfs的時候才知道可以用dfs去做,思想是怎麼樣的呢,舉個例子,題目要求3,的全排列,如果確定了第一位,就剩下兩位,確定了第二位,就剩下一位,最後一位只要跟全面不同就行, 這個深搜找通路有點像,只是終點不是確定的,但確定了長度,那麼深搜的模板就很容易套上去了。

1.先建立兩個陣列,乙個存放深搜過的節點陣列a,乙個是訪問控制陣列v

2.寫核心部分就是for,和深搜一樣,乙個for迴圈,檢視1到3那個沒有遍歷

for(int i=0;i3.當x=n的時候,表示已經存放滿了陣列,是要輸出了

if

(x==n)

其實深搜就是遍歷所有可能,下面靈魂畫手畫個圖

for肯定從1開始,1遍歷完了123,132之後,又遍歷2,2遍歷後,又遍歷3,這就可以達到全排列了。

這是題目連線:

下面是ac**

#include

#include

using namespace std;

int a[11]

,v[11

],n;

void

dfs(

int x)

for(

int i=

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

return;}

intmain()

return0;

}

DFS全排列問題

題目描述 今天,桐桐的老師布置了一道數學作業,要求列出所有從數字1到數字n的連續自然數的排列,要求所產生的任一數字序列中不允許出現重複的數字。因為排列數很多,桐桐害怕寫漏了,所以她決定用計算機程式設計來解決。輸入只有乙個整數n 1 n 9 輸出按字典序輸出由1 n組成的所有不重複的數字序列,每行乙個...

dfs解決全排列問題

給定乙個n 0該問題相當於找出從某點到目的點的所有路徑問題,於是想到用dfs深度優先演算法,找到一條路徑即可直接輸出,直到找到所有的路徑。思路大致是,先放置乙個數,然後在沒有放置過的數字當中選擇乙個放在下乙個位置,依次進行,那我們發現,其實在選擇放置下乙個數字時,和解決之前的問題是一樣的 還是要在沒...

全排列問題 深搜DFS

description 輸出自然數 1 到 n 所有不重複的排列,即 n 的全排列,要求所產生的任一數字序列中不允許出現重複的數字。input 第一行為乙個整數n。output 由1至n組成的所有不重複的數字序列,每行乙個序列。每個數字之間由空格隔開。sample input 1 3sample o...