dfs解決全排列問題

2021-10-06 08:08:58 字數 613 閱讀 4499

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

遞迴 首先要有乙個終止條件,那麼這個問題的終止條件就是你已經放置了n個數字。那麼在放置過程中,我們需要記錄你此時在放置第幾個數字。而且需要標記每乙個數字是否已經放置過了。

#include

using

namespace std;

int n;

int a[12]

;bool vis[12]

;void

dfs(

int x)

printf

("%d\n"

,a[n]);

return;}

for(

int i =

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

return;}

intmain()

dfs全排列問題

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

DFS全排列問題

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

全排列問題 深搜DFS

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