zoukankan      html  css  js  c++  java
  • 温习全排列

    全排列

    题目
    找出从自然数1,2,…… n中任取r个数的组合。

    比如n=5,r=3。
    可用这种递归思想来考虑组合函数的算法,设子程序[计算分组子程序(m,k)] ,即找出自然数1。2……m中任取k个数的全部组合。当组合的第一个数字选定时,其后面的数字是从余下的m-1个数中取k-1个数的全部组合。


    比如 n=3,r=2。
    12 21 13 31 23 32
    比如 n=3 r=3;
    123 132 213 232 312 321

    题解:从序号1选择,一直到序号r。

    每一个序号有n种选择(排除已经选择过的)。这道题目就是dfs加上回溯
    关键代码

    void DFS(int y,int temp[])//y为已经选择到了的序号。temp数组用来存储选好的数据
    {
        if(y>r)return ;
        if(y==r)//选完了,进行输出
        {
            for(int i=0;i<r;i++){
                printf("%d",temp[i]);
            }
            printf("
    ");
            return ;
        }else{
            int u;
            for(int i=0;i<n;i++)//进行选择
            {
                if(a[i]==0)continue;//0为已经选择的意思
                else{
                    u=a[i];
                    temp[y]=a[i];
                    a[i]=0;
                    DFS(y+1,temp);//回溯
                    a[i]=u;
                    temp[y]=0;
                }
            }
        }
    }

    全然代码

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,r,a[9];
    void DFS(int y,int temp[]){
        if(y>r)return ;
        if(y==r){
            for(int i=0;i<r;i++){
                printf("%d",temp[i]);
            }
            printf("
    ");
            return ;
        }else{
            int u;
            for(int i=0;i<n;i++){
                if(a[i]==0)continue;
                else{
                    u=a[i];
                    temp[y]=a[i];
                    a[i]=0;
                    DFS(y+1,temp);
                    a[i]=u;
                    temp[y]=0;
                }
            }
        }
    }
    int main()
    {
        int temp[9];
        scanf("%d%d",&n,&r);
        for(int i=0;i<n;i++)    a[i]=i+1;
        DFS(0,temp);
    }
  • 相关阅读:
    TCP带外数据
    ASP.Net Core 返回的json数据,自定义日期格式
    C# 简单的区块链实现
    PowerShell自动部署ASP.NET Core程序到 IIS
    ASP.NET Core依赖注入多个服务实现类
    EF Core 2.0 执行原始查询如何防止SQL注入
    C#7 进入快速迭代道路
    QuartzNet 任务管理系统
    WebApi如何传递参数
    C# 快速高效率复制对象另一种方式 表达式树
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7347453.html
Copyright © 2011-2022 走看看