遞迴實現組合型列舉 演算法競賽高階指南

2021-10-03 16:17:58 字數 904 閱讀 2864

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

輸入格式

兩個整數 n,m ,在同一行用空格隔開。

輸出格式

按照從小到大的順序輸出所有方案,每行1個。

首先,同一行內的數公升序排列,相鄰兩個數用乙個空格隔開。

其次,對於兩個不同的行,對應下標的數一一比較,字典序較小的排在前面(例如1 3 5 7排在1 3 6 8前面)。

資料範圍

n>0 ,

0≤m≤n ,

n+(n−m)≤25

輸入樣例:

5 3輸出樣例:

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

/*

1. 利用遞迴對齊進行列舉即可

*/#include

using

namespace std;

int n,m;

int num[26]

;//代表數字是否用到了,0-沒有,1-用了

int out[26]

;//代表這個位置上的數字

void

dfs(

int index)

//未列舉完成,繼續進行列舉

for(

int i =

1; i <= n; i++

)//從1開始,因為,n>0 }}

intmain()

演算法競賽高階指南 遞迴實現指數型列舉

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

演算法競賽高階指南 遞迴實現排列型列舉

把 1 n 這 n 個整數排成一行後隨機打亂順序,輸出所有可能的次序。輸入格式 乙個整數n。輸出格式 按照從小到大的順序輸出所有方案,每行1個。首先,同一行相鄰兩個數用乙個空格隔開。其次,對於兩個不同的行,對應下標的數一一比較,字典序較小的排在前面。資料範圍 1 n 9 輸入樣例 3輸出樣例 1 2...

題解 《演算法競賽高階指南》遞迴實現排列型列舉

把 1 n 1 sim n 1 n 這 n n 10 n n lt 10 n n 10 個整數排成一行後隨機打亂順序,輸出所有可能的次序。按照從小到大的順序輸出所有方案,每行1個。首先,同一行相鄰兩個數用乙個空格隔開。其次,對於兩個不同的行,對應下標的數一一比較,字典序較小的排在前面。迴圈遍歷1 n...