[nyoj-32]-组合数(DFS)

来源:互联网 发布:sql join left join 编辑:程序博客网 时间:2024/05/29 17:30
描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
输入
输入n、r。
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543542541532531521432431421

321

刚学DFS,看了一下午,如下所示,去掉注释后的代码运行结果,光凭脑袋想太难了,想久了越来越混乱,还是用数据表示过程比较直观

5 3
i = 5 count = 1
i = 4 count = 2
i = 3 count = 3
543
i = 2 count = 4
542
i = 1 count = 5
541
i = 3 count = 6
i = 2 count = 7
532
i = 1 count = 8
531
i = 2 count = 9
i = 1 count = 10
521
i = 4 count = 11
i = 3 count = 12
i = 2 count = 13
432
i = 1 count = 14
431
i = 2 count = 15
i = 1 count = 16
421
i = 3 count = 17
i = 2 count = 18
i = 1 count = 19
321


有了以上的具体搜索过程,剩下的自己去想吧,这东西只能花时间才搞的定

import java.util.Scanner;public class Main {static int n,m,count=1;static int a[] = new int[11];public static void main(String[] args) {Scanner scan = new Scanner(System.in);n = scan.nextInt();m = scan.nextInt();dfs(n,m);}private static void dfs(int x,int y){int i,j;for(i=x; i>=y; i--){if(y>=1){a[y] = i;//System.out.println("i = "+i+" count = "+count);//count++;dfs(i-1,y-1);}else{for(j=m; j>0; j--){System.out.print(a[j]);}System.out.println();return ;}}}}


0 0
原创粉丝点击