jd123 @ 2023-01-24 14:48:48
int n,cnt;
int a[14][15];
int book[15][15];
int ans[15];//放置列的解
//看该点是否符合
bool pp(int hang)
{
int x=hang,y=ans[hang];
for(int i=1;i<hang;i++)
{
int x1=i,y1=ans[i];
if((x1-x==y1-y)||(x1-x==y-y1))
{
return 0;
}
if(x1==x||y==y1)
{
return 0;
}
}
return 1;
}
void dfs(int hang)
{
if(hang==n+1)
{
cnt++;
if(cnt<=3)
{
for(int i=1;i<=n;i++)
{
printf("%d ",ans[i]);
}
printf("\n");
}
}
for(int i=1;i<=n;i++)
{
if(book[hang][i]==1)
{
continue;
}else book[hang][i]=1;
ans[hang]=i;
//先检查这一次放的点是不是符合的
if(!pp(hang))
{
book[hang][i]=0;
continue;
}
dfs(hang+1);
book[hang][i]=0;
}
}
int main()
{
scanf("%d",&n);
dfs(1);
printf("%d",cnt);
return 0;
}
by Adchory @ 2023-01-24 14:58:34
@jd123 其实你可以开 O2 的,其次,你的判断操作时间复杂度较高
by jd123 @ 2023-01-24 15:02:45
@Reimu_Hakurei 哇,开了O2优化就过了,一直不知道那个O2有什么用
by Wtmwy @ 2023-02-19 23:20:40
@jd123 有的测试点超时得不多,一优化就过了