1620 全數列 dfs的首次運用

2021-08-21 16:22:52 字數 1416 閱讀 9170

為什麼不讓用iframe….

description

給定n個數 a[0] , a[1] …….. a[n-1], 輸出其全排列。

input

第一行輸入乙個數n,(n<7)

接下來一行輸入n個數。

output

按字典序從小到大輸出全排列

sample input

3 1 2 3

3 1 2 2

sample output

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

1 2 2

2 1 2

2 2 1

#include

#include

int a[1000],bb,c,tl;

intlc[6000][10];

int test(int aaa)

if(flag==c)

return

0; }

for(int i=0;ilc[tl][i]=aaa[i];

tl++;

return1;}

int search(int n,int aa)

printf("\n");}}

else

for(int i=0;iif(a[i]!=-1)

}}int add(int aa)

else

break;

}bb++;

}int main()

int aaaa[10]=;

search(0,aaaa);}}

沒什麼技術又強烈想做這題的我先祭一張圖:

對,然後就寫了一套深度優先搜尋;

解析:這段原始碼在main中讀入所有的值

讀入同時直接用插入排序排好,省去了後續的排序過程.

接著,從0位開始深度優先搜尋.

搜尋第一位,然後判斷,一位不為-1,則把一位標記(占領)為-1,然後1位進行搜尋search(1,aa);

這裡為了方便,就把記錄結果的陣列帶著走了.每次呼叫前,都會把下一位記錄為當前數字.

這樣一直進行,直到search的一引數》=一開始讀入的數字個數c,則輸出,然後返回.返回時,把之前占領的所有格仔回溯,以便下一次搜尋.

但是考慮到重複情況,每次輸出前,用乙個單獨的子程式來判斷是否有重複,如果有則不輸出,沒有則輸出並記錄.

因為題目資料範圍(0

LeetCode 實踐練習16 20

方法 還是先將陣列排個序,然後遍歷陣列,思路跟上一題相似,都是先確定乙個數,然後用兩個指標left和right來滑動尋找另外兩個數,每確定就求三數之和,然後算和給定值的差的絕對值存在newdiff中,比較更新即可。遞迴的思想 不是很了解,需詳細了解 方法 在這裡為了避免重複項,我們使用了stl中的s...

PAT B1048 數字加密 16 20

本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用j代表10 q代表11 k代表12 對偶數字,用b的數字減去a的數字,若結果為負數,則再加10。這裡令個位為第1位。輸入格式 輸入...

16 20 類的基本與練習。

1.類的定義 class box 定義乙個類相當於創造了乙個新的物品,而我們可以在其基礎上產生單獨的個體,就是物件。2.定義物件與訪問資料成員 include using namespace std class box int main 成員函式定義,包括建構函式 line line void li...