字典树

来源:互联网 发布:成濑川奈留 知乎 编辑:程序博客网 时间:2024/05/16 12:23

 

/*题目网址:http://acm.nyist.net/JudgeOnline/problem.php?pid=32 */#include<iostream>#include<cstdio>#include<malloc.h>using namespace std;#define manx 12struct node{    int num;    node*next[manx];};int n,r,stack[20];void init(node *tree,int n){    tree->num = n;    for(int i=0;i<manx;i++)        tree->next[i]=NULL;}void make(node *tree,int n){    init(tree,n);    for(int i=1;i<=n-1;i++){        if(tree->next[i]==NULL){            node *p = new node();            tree->next[i]=p;            make(p,n-i);        }    }}void query(node *tree,int k){    if(k==r){        for(int i=1;i<=k;i++)            printf("%d",stack[i]);        printf("\n");        return ;    }    for(int i=1;i<manx;i++){        if(tree->next[i]==NULL) continue;        stack[++k] = tree->next[i]->num;        query(tree->next[i],k);        k--;    }}int main(){        while(cin>>n>>r){        for(int i=n;i>=1;i--){            node *tree = new node();                    make(tree,i);            stack[1]=tree->num;            query(tree,1);        }        }}