全排列問題,不是計算全排列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...