zoukankan      html  css  js  c++  java
  • 一本通搜索与回溯1317:【例5.2】组合的输出

    1317:【例5.2】组合的输出


    时间限制: 1000 ms         内存限制: 65536 KB
    提交数: 13076     通过数: 6333 

    【题目描述】

    排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。

    现要求你用递归的方法输出所有组合。

    例如n=5,r=3,所有组合为:

    1 2 3   1 2 4   1 2 5   1 3 4   1 3 5   1 4 5   2 3 4   2 3 5   2 4 5   3 4 5

    【输入】

    一行两个自然数n、r(1<n<21,1≤r≤n)。

    【输出】

    所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。

    【输入样例】

    5 3

    【输出样例】

      1  2  3
      1  2  4
      1  2  5
      1  3  4
      1  3  5
      1  4  5
      2  3  4
      2  3  5
      2  4  5
      3  4  5
    源码:
    #include<bits/stdc++.h>
    using namespace std;
    int n,r;
    int vis[30]={0};
    int a[30];
    void print()
    {
        for(int i=1;i<=r;i++)
            cout<<"  "<<a[i];
        cout<<endl;
    }
    void searchh(int step)
    {
        for(int i=a[step-1];i<=n;i++)
        {
            if(!vis[i])
            {
                vis[i]=1;
                a[step]=i;
                if(step==r) print();
                else searchh(step+1);
                vis[i]=0;
            }
        }
    }
    int main()
    {
        cin>>n>>r;
        a[0]=1;
        searchh(1);
        return 0;
    }
    #include<bits/stdc++.h>
    using namespace std;
    int n,r;
    int vis[30]={0};
    int a[30];
    void print()
    {
        for(int i=1;i<=r;i++)
            cout<<"  "<<a[i];
        cout<<endl;
    }
    void searchh(int step)
    {
        for(int i=a[step-1];i<=n;i++)
        {
            if(!vis[i])
            {
                vis[i]=1;
                a[step]=i;
                if(step==r) print();
                else searchh(step+1);
                vis[i]=0;
            }
        }
    }
    int main()
    {
        cin>>n>>r;
        a[0]=1;
        searchh(1);
        return 0;
    }
  • 相关阅读:
    shell字符串截取
    QT,QT SDK, QT Creator 区别
    linux -- 扩容 /home 空间( xfs文件系统分区扩容指定挂载点)
    条件变量与互斥量
    越努力越幸运--2018年7月22日周记
    越努力越幸运--动态数组vector
    越努力越幸运--3-日常bug修复
    越努力越幸运--2-LD_PRELOAD, fork ,僵尸进程
    越努力越幸运--1
    makefile--回顾基础篇
  • 原文地址:https://www.cnblogs.com/weijianzhen/p/12361794.html
Copyright © 2011-2022 走看看