XYNUOJ 1273 搜尋基礎 全排列問題

2021-08-10 11:13:45 字數 1177 閱讀 9403

時間限制: 1 sec  記憶體限制: 128 mb

提交: 22  解決: 12

[提交][狀態][討論版]

全排列問題 form.pas/c/cpp

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

[輸入格式]  

1<=n<=9

[輸出格式]

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

[輸入樣例]

3[輸出樣例]

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1搜尋

//用next_permutation做的

#include

#include

using namespace std;

int main()

sort(a,a+n);

dowhile(next_permutation(a,a+n));

}return 0;}

//用搜尋做的 //

全排列是將一組數按一定順序進行排列,如果這組數有n個,那麼全排列數為n!個。現以為

例說明如何編寫全排列的遞迴演算法。

1、首先看最後兩個數4, 5。 它們的全排列為4 5和5 4, 即以4開頭的5的全排列和以5開頭的4的全排列。

由於乙個數的全排列就是其本身,從而得到以上結果。

2、再看後三個數3, 4, 5。它們的全排列為3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六組數。

即以3開頭的和4,5的全排列的組合、以4開頭的和3,5的全排列的組合和以5開頭的和3,4的全排列的組合.

從而可以推斷,將整組數中的所有的數分別與第乙個數交換,這樣就總是在處理後n-1個數的全排列。

#include

#include

int a[10];//用於儲存初始的數,迴圈過程中該陣列一直不改變 

int visit[10];//用於標記是否遍歷過

int ans[10];//用於輸出

void perm(int k,int n)//用於給ans陣列的第k個數賦值

for(int i=0;i}} 

int main()

return 0;

DFS BFS 搜尋基礎

首先深搜 先看輸入格式 5 0 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 第一行輸入乙個數n,接下來輸入n n的數字矩陣,0代表房間,1代表牆,每個位置都可以往上下左右四個方向走 題意非常簡單,就是求以左上角為出發點所能到達的最多的房間數。inc...

基礎搜尋題 油田合併 深度搜尋

某石油公司發現了乙個油田。該油田由n m個單元組成的矩形,有些單元裡有石油,有些則沒有。單元油田可以通過上,下,左或右連通。在乙個單元油田裡架設一台採油機,它可以把和該單元油田相連的單元油田的石油採完。該公司想知道最少需要架設幾台採油機能把所有的石油採完?輸入 先輸入2個正整數n,m 1 n,m 5...

基礎搜尋入門(二)

水題。bfs 優先佇列。從乙個位置到達還有乙個位置的最少運算元。清單 include include include include includeusing namespace std struct edge int n,a,b int n 205 int vis 205 void bfs w.x...