NYOJ 组合数 32(DFS)

来源:互联网 发布:java知识分享网 编辑:程序博客网 时间:2024/06/08 11:09

组合数

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
输入
输入n、r。
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543542541532531521432431421321
来源
[苗栋栋]原创
上传者

苗栋栋


#include<stdio.h>#include<string.h>int n,r,deep;bool visit[11];int a[11];void DFS(int n,int deep,int r)//入口,当前层数, 总层数{if(deep>r)return;for(int i=n;i>=1;i--){  if(!visit[i]){<span style="font-family: Tahoma, Arial, sans-serif, simsun;">//判断点是否访问过</span>visit[i]=true;a[deep]=i;if(deep==r){for(int i=1;i<=r;i++) printf("%d",a[i]);printf("\n");}DFS(i-1,deep+1,r);visit[i]=false;  }}}int main(){void DFS(int n,int deep,int r);while(~scanf("%d%d",&n,&r)){memset(visit,false,sizeof(visit));DFS(n,1,r);}return 0;}




0 0
原创粉丝点击