(回溯4)部分全排列

版权声明:所有内容仅供大家学习与复习使用,请勿用于任何商业用途 https://blog.csdn.net/qq_40828914/article/details/80697097

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

#include <iostream>
using namespace std;
bool vis[100];
int total=0;
int ans[100];

//输出结果
void print(int r){
   // if(total==5) return ;
    total++;
    cout<<"<"<<total<<">"<<endl;
    for(int i=1;i<=r;i++){
        cout<<ans[i]<<" ";
    }
    cout<<endl;
} 

void search(int t,int n,int r){
    if(t==r+1) print(r);//取r个数的限制条件
    for(int i=1;i<=n;i++){
        if(!vis[i]){//判断是i否出现过
            ans[t]=i,vis[i]=1;
            search(t+1,n,r);
            vis[i]=0;
        }
    } 
} 

int main(){
    int n,r;
    cin>>n>>r;
    search(1,n,r);
    cout<<total<<endl;
    return 0;
}
阅读更多
换一批

没有更多推荐了,返回首页