jym的博客

学习使我快乐

(回溯4)部分全排列

题目设有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;
}
阅读更多
版权声明:欢迎转载 https://blog.csdn.net/qq_40828914/article/details/80697097
个人分类: oj练习
想对作者说点什么? 我来说一句

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

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭