天天看點

簡單dfs模闆 luogu全排列問題

emmmm我也想了很久才做出來好吧…作為一個瘋狂練搜尋的小菜雞

題目描述

輸出自然數 11 到 nn 所有不重複的排列,即 nn 的全排列,要求所産生的任一數字序列中不允許出現重複的數字。

輸入格式

一個整數 nn。

輸出格式

由 1∼n 組成的所有不重複的數字序列,每行一個序列。

每個數字保留 55 個場寬。

輸入輸出樣例

輸入 #1複制

輸出 #1複制

1    2    3
    1    3    2
    2    1    3
    2    3    1
    3    1    2
    3    2    1
           

1<=n<=9;

直接上代碼

#include <iostream>
#include<cstdio>
using namespace std;
int n;
int a[10],b[10];
void dfs(int i)
{
    if (i > n)
    {
        for(int j = 1; j <=n; j++)
            printf("%5d",a[j]);
        printf("\n");
        return;
    }
    for (int j = 1; j <= n; j++)//暴力枚舉n個數
    {
        if(a[i]==0&&b[j]!=1)//把j存起來 看有沒有用過
        {
            a[i] = j;
            b[j] =1 ;
            dfs(i + 1);
            a[i] = 0;//回溯
            b[j] = 0;
        }
    }
    return;
}
int main()
{
    cin >> n;//輸入
    dfs(1);
    return 0;
}
           

繼續閱讀