/**
回溯算法之排列组合
设有n个整数的集合{1,2,,,,n},从中取出任意r个数进行排列,试列出所有的排列
*/
#include<iostream>
#include<stdlib.h>
#define maxsize 100001
using namespace std;
int a[maxsize];
int vis[maxsize]={0};
int sum=0;
int n,r;
void print()
{
sum++;
for(int i=1;i<=r;i++)
cout<<a[i]<<" ";
cout<<endl;
}
void dfs(int cur)
{
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
vis[i]=1;
a[cur]=i;
if(cur==r)
print();
else
dfs(cur+1);
vis[i]=0;
}
}
}
int main()
{
cin>>n>>r;
dfs(1);
cout<<"sum="<<sum<<endl;
return 0;
}
本文探讨了使用回溯算法解决从n个整数中选取r个进行排列的问题,通过递归深度优先搜索策略,实现了所有可能排列的枚举,并统计了排列总数。
1521

被折叠的 条评论
为什么被折叠?



