请问如何在2秒的时限里输出n的所有错位排列的情况(n<=10)
现在的代码(10会tle,开了O2)
#include<bits/stdc++.h>
using namespace std;
int n,r;
int a[110]={1};
bool b[110]={};
void dfs(int dep)
{
if(dep==n+1)
{
for(int i=1;i<=n;i++) printf("%d ",a[i]);
printf("\n");
return;
}
else
{
for(int i=1;i<=n;i++)
{
if(!b[i]&&dep!=i)
{
a[dep]=i;
b[i]=1;
dfs(dep+1);
a[dep]=0;
b[i]=0;
}
}
}
}
int main()
{
scanf("%d",&n);
dfs(1);
}