洛谷P1706及algorithm庫的第一步探索

2021-10-11 03:34:25 字數 2194 閱讀 5332

題目描述

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

輸入格式

乙個整數 n。

輸出格式

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

每個數字保留 5 個場寬。

輸入輸出樣例

輸入#1:

3輸出#1:

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

hint

1<=n<=9

//create by eakal7

#include

//這種方法在n=9||8是直接超過了2e

#include

#include

#include

#include

using

namespace std;

int a[50]

=;int n, num, p;

int r;

int flag[10]

;int start;

int end_n;

intpailie

(int n)

}return1;

}void

pritn

(int e)

for(

int i = k -

1; i >=

0; i--

)printf

("\n");

}int

main()

for(

int i = start; i < end_n; i++

) r = i;

flag[r %10]

=1;while

(r /=10

)if(pailie

(n)==1)

}return0;

}

執行正常但是運算量太大,直接爆了,而且思想過於複雜,考慮到dfs想到應該可以dfs

#include

using

namespace std;

int n,pd[

100]

,used[

100]

;void

printt()

void

dfs(

int k)

//深搜函式,當前是第k格

for(i=

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

}int

main()

#include

#include

using

namespace std;

intmain()

sort

(a,a+n)

;//可以自行測試一下刪除後的結果

dowhile

(next_permutation

(a,a+n));

}return0;

}

next_permutation這個函式直接對1~n的全排列,並且是從陣列中當前的字典序開始依次增大直至到最大字典序。注:這個函式是直接改變陣列位址裡的數值的。

所以直接貼上改動後的**:

//create by eakal7

//next_permutation的debug nice!!!!

#include

#include

using

namespace std;

intmain()

printf

("\n");

while

(next_permutation

(temp, temp + n)

)printf

("\n");

}}return0;

}

ps:algorithm這個庫里還有好多挺好用的函式建議一一**

pps:第一篇部落格 by eakal7 2020.12.3

參考部落格:

關於全排列 next_permutation() 函式的用法

洛谷 P1706 全排列

可能是最簡單的題了 講真搜尋hhh 洛谷 輸出自然數1到n所有不重複的排列,即n的全排列,要求所產生的任一數字序列中不允許出現重複的數字。輸入格式 n 1 n 9 輸出格式 由1 n組成的所有不重複的數字序列,每行乙個序列。每個數字保留5個常寬。輸入樣例 1 3 輸出樣例 1 1 2 3 1 3 2...

洛谷 P1706 全排列問題

題目描述 輸出自然數 11 到 nn 所有不重複的排列,即 nn 的全排列,要求所產生的任一數字序列中不允許出現重複的數字。輸入格式 乙個整數 nn。輸出格式 由 1 sim n1 n 組成的所有不重複的數字序列,每行乙個序列。每個數字保留 55 個場寬。輸入輸出樣例 輸入 1 複製 3輸出 1 複...

洛谷P1706全排列問題

p1706全排列問題 題目描述 輸出自然數1到n所有不重複的排列,即n的全排列,要求所產生的任一數字序列中不允許出現重複的數字。輸入輸出格式 輸入格式 n 1 n 9 輸出格式 由1 n組成的所有不重複的數字序列,每行乙個序列。每個數字保留5個常寬。輸入輸出樣例 輸入樣例 1 3輸出樣例 1 1 2...