zoukankan      html  css  js  c++  java
  • 数字排列(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;
    }

  • 相关阅读:
    16款值得一用的iPhone线框图模板 (PSD & Sketch)
    设计神器
    {CF812}
    hiho1080(多标记线段树)
    {容斥原理}
    {dp入门}
    {AC自动机}
    CF807
    Trie树
    杂记
  • 原文地址:https://www.cnblogs.com/zzyh/p/6604768.html
Copyright © 2011-2022 走看看