评测Link
#include<bits/stdc++.h>
using namespace std;
int const N(20);
char g[N][N];
bool col[N],dg[N << 1],udg[N << 1];
int res(0);
int paths[10010][N];
int n;
inline void dfs(int cur)
{
if(cur == n)
{
++res;
return ;
}
for(int i(0);i<n;++i)
if(!col[i] and !dg[cur + i] and !udg[n - cur + i])
{
paths[res][cur] = i + 1;
col[i] = dg[cur + i] = udg[n - cur + i] = true;
dfs(cur + 1);
col[i] = dg[cur + i] = udg[n - cur + i] = false;
}
return ;
}
int main()
{
memset(col,false,sizeof col);
memset(dg,false,sizeof dg);
memset(udg,false,sizeof udg);
scanf("%d",&n);
dfs(0);
for(int i(0);i<3;++i)
{
for(int j(0);j<n;++j)
printf("%d ",paths[i][j]);
putchar('\n');
}
printf("%d",res);
putchar('\n');
return 0;
}
已经修改过了许多地方,但是依然无济于事,,