• 数字排列(n,m)(搜索与回溯)


    题目描述:

    设有n个整数的集合{1,2,…,n},从中取出任意r个数进行排列(r<n),试列出所有的排列。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<iomanip>
    using namespace std;
    int sum,a[100],b[100];
    int search(int);
    int print();
    int n,r;
    int main()
    {
    scanf("%d%d",&n,&r);//从n个数中选r个数;
    search(1);//就是有r个位置,从n中个数选择数字来填,从第一个开始;
    cout<<"number="<<sum<<endl;
    return 0;
    }
    int search(int x)
    {
    for(int i=1;i<=n;i++)//有n种可能
    {
    if(!b[i])//如果没有被填过
    {
    a[x]=i;//第x个数是i
    b[i]=1; //标志i已经填过;
    if(x==r)print();//如果填完,输出
    else search(x+1);//否则 填下一个
    b[i]=0;//回溯
    }
    }
    }
    int print()
    {
    sum++;
    for(int j=1;j<=r;j++)
    cout<<setw(2)<<a[j];
    cout<<endl;
    }

  • 相关阅读:
    [论文复现笔记]Im2Struct
    深度学习踩坑
    Matlab问题汇总
    Linux网络服务
    探索Blender
    [每日挖坑]20200728
    Ubuntu重启之后显卡挂了
    3D视觉知识点
    [每日挖坑]20200727
    遥感影像相关知识
  • 原文地址:https://www.cnblogs.com/zzyh/p/6604768.html
Copyright © 2020-2023  润新知