遞迴實現指數型列舉

2021-09-24 15:48:08 字數 1215 閱讀 1336

從 1 ~ n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。

輸入格式

輸入乙個整數 n。

輸出格式

每行輸出一種方案。

同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。

對於沒有選任何數的方案,輸出空行。

本題有自定義校驗器(spj),各行(不同方案)之間的順序任意。

資料範圍1≤n

≤15

1≤n≤15

1≤n≤15

輸入樣例:

3
輸出樣例:

3

22 3

11 3

1 21 2 3

本題目是一道基本的遞迴題目,而且這是一種 「選或不選」 型別的列舉順序。

遞迴需要儲存排列的資料,這裡使用兩種方式進行儲存。

其一使用全域性陣列儲存。

所有遞迴資料使用乙個全域性陣列儲存需要注意的是,在遞迴呼叫後需要還原狀態。

#include #include using namespace std;

vectorresult;

void dfs(int n,int index)

cout << endl;

return ;

}dfs(n,index + 1);

result.push_back(index + 1);

dfs(n,index + 1);

result.pop_back(); // 遞迴呼叫後還原狀態

}int main()

其二使用函式引數儲存,使用位運算表示(當前位為1表示該位表示的數存在)。

#include using namespace std;

void dfs(int n,int index,int status)

}cout << endl;

return ;

}dfs(n,index + 1,status); // 不取下乙個數

dfs(n,index + 1,status | 1 << index); // 取下乙個數

}int main()

遞迴實現指數型列舉

從 1 n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。輸入乙個整數n。每行輸出一種方案。同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。對於沒有選任何數的方案,輸出空行。本題有自定義校驗器 spj 各行 不同方案 之間的順序任意。1 n 15 1 n 15 1 n 15 3...

遞迴實現指數型列舉

從 1 n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。輸入格式 輸入乙個整數n。輸出格式 每行輸出一種方案。同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。對於沒有選任何數的方案,輸出空行。本題有自定義校驗器 spj 各行 不同方案 之間的順序任意。資料範圍 1 n 15 ...

遞迴實現指數型列舉

從 1 n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。輸入格式 輸入乙個整數n。輸出格式 每行輸出一種方案。同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。對於沒有選任何數的方案,輸出空行。本題有自定義校驗器 spj 各行 不同方案 之間的順序任意。資料範圍 1 n 15 ...