思路:以列深搜, 看每一行是否符合条件, 注意打表,否则超时。
#include<iostream>
#include<algorithm>
using namespace std;
int n, cnt;
int line[15], ans[11];
void dfs(int r)
{
if(r==n+1)
{
cnt++;
return;
}
for(int i=1; i<=n; i++)
{
int flag=1;
for(int j=1; j<r; j++)
{
if(line[j]==i || abs(r-j)==abs(i-line[j]))
{
flag=0;
break;
}
}
if(flag)
{
line[r]=i;
dfs(r+1);
}
}
}
int main(){
for(n=1; n<=10; n++)
{
cnt=0;
dfs(1);
ans[n]=cnt;
}
while(cin>>n && n)
{
cout<<ans[n]<<endl;
}
return 0;
}