有什么致命性错误?、
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,m,arr[1001115],book[100001],cnt=0,ans[10005];//cnt是找到了从火星人数字开始的第cnt个全排列数(火星人数字为1)
void dfs(int x)
{
//有没有确定到n+1位,确定的是是否找到了一个全排列数
if(x==n+1)
{
cnt+=1;
//因为cnt=1才是定位到了火星人的全排列数,因此要m+1
if(cnt==m+1)
{
//输出ans
for(int i=1;i<=n;i++)
{
printf("%d ",ans[i]);
}
exit(1);//终止整个函数
}
return ;
}
for(int i=1;i<=n;i++)
{
//如果当前还没有定位到或星人的数字
if(cnt==0)
{
//那么就需要把i改成火星人第x位上的数字
i=arr[x];
}
if(book[i]==0)
{
book[i]=1;
ans[x]=i;
dfs(x+1);
book[i]=0;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&arr[i]);
}
dfs(1);
return 0;
}