组合数的生成(II)
#include <iostream>#include <cstdio>#define maxn 1000using 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.谢谢体会回溯的条件。