renzhanwen @ 2024-06-11 20:06:34
样例过了,只有61分,直接上代码。
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100][100];
bool s[100]={false};
bool wow(int i,int j)
{
for(int y=1;y<=n;y++)//左下角
{
if(i+y>n||i-y<1)
break;
if(a[i+y][j-y]!=0)
return false;
}
for(int y=1;y<=n;y++)//右下角
{
if(i+y>n||j+y>n)
break;
if(a[i+y][j+y]!=0)
return false;
}
for(int y=1;y<=n;y++)//左上角
{
if(i-y<1||j-y<1)
break;
if(a[i-y][j-y]!=0)
return false;
}
for(int y=1;y<=n;y++)
{
if(i-y<1||j+y>n)
break;
if(a[i-y][j+y]!=0)
return false;
}
return true;
}
void f(int t)
{
if(t>n)
{
bool x=true;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(a[i][j]!=0&&wow(i,j)==false)
{
x=false;
break;
}
if(x==false)
break;
}
if(x==true)
{
m++;
if(m<=3)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]!=0)
cout<<j<<" ";
cout<<endl;
}
}
return;
}
for(int i=1;i<=n;i++)
if(s[i]==false)
{
s[i]=true;
a[t][i]=t;
f(t+1);
a[t][i]=0;
s[i]=false;
}
}
int main()
{
cin>>n;
f(1);
cout<<m;
return 0;
}