首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

结合数的生成(II)

2012-11-09 
组合数的生成(II)#include iostream#include cstdio#define maxn 1000using namespace stdint hash[m

组合数的生成(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.谢谢体会回溯的条件。

热点排行