结合数的生成(II)
组合数的生成(II)
#include <iostream> #include <cstdio> #define maxn 1000 using namespace std; int hash[maxn]; int b[maxn]; int r, n; void dfs(int lev){ if(lev > r){ for(int i = 1; i <= r; i++){ printf("%d ", b[i]); } printf("\n"); return ;//回溯 } for(int j = 1; j <= n; j++){ if(!hash[j] && j > b[lev-1]){//标记,控制后面的数比前面的数大。 b[lev] = j; hash[j] = 1; dfs(lev+1); hash[j] = 0;//回溯 } } } int main() { while(scanf("%d%d", &n, &r) != EOF){ dfs(1); } return 0; }
- 1楼wangwenhao005天前 09:58
- 在第16行的return;可以去掉,但是后面要加else.谢谢体会回溯的条件。