题意:求出数字1-n的第m个全排列
1.调用函数
#include<iostream>
#include<algorithm>
#define maxn 1000+5
using namespace std;
int n,m;
int ans[maxn];
int main()
{
while(cin>>n>>m)
{
for(int i=1;i<=n;i++) ans[i]=i;
while(--m)
{
next_permutation(ans+1,ans+n+1);
}
cout<<ans[1];
for(int i=2;i<=n;i++) cout<<" "<<ans[i];
cout<<endl;
}
return 0;
}
2.手写函数
#include<iostream>
#define maxn 1000+5
using namespace std;
int ans[maxn];
int visit[maxn];
int n,m,sum;
int flag;
void print()
{
cout<<ans[1];
for(int i=2;i<=n;i++) cout<<" "<<ans[i];
cout<<endl;
}
void dfs(int d)
{
if(d==n+1)
{
if(sum==m)
{
print();
flag=1;
return;
}
else sum++;
}
for(int i=1;i<=n;i++)
{
if(!visit[i])
{
ans[d]=i;
visit[i]=1;
dfs(d+1);
visit[i]=0;
if(flag) return;
}
}
}
int main()
{
cin.sync_with_stdio(false);
while(cin>>n>>m)
{
for(int i=1;i<=n;i++) ans[i]=i,visit[i]=0;
sum=1;
flag=0;
dfs(1);
}
return 0;
}
hdu 1027 Ignatius and the Princess II
原文:http://blog.csdn.net/zafkiel_nightmare/article/details/45920695