列表

详情


NC235813. N皇后问题

描述

给出一个的国际象棋棋盘,你需要在棋盘中摆放n个皇后,使得任意两个皇后之间不能互相攻击。具体来说,不能存在两个皇后位于同一行、同一列,或者同一对角线。请问共有多少种摆放方式满足条件。

输入描述

一行,一个整数,表示棋盘的大小。

输出描述

输出一行一个整数,表示总共有多少种摆放皇后的方案,使得它们两两不能互相攻击。

示例1

输入:

4

输出:

2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 33ms, 内存消耗: 384K, 提交时间: 2022-11-30 22:08:07

#include <stdio.h>
#include <math.h>
int a[12],n,sum=0;
int f1(int k)
{
 int i;
 for(i=1;i<k;i++)
 {if(abs(k-i)==abs(a[k]-a[i])||a[k]==a[i])
  return 0;
 }
  return 1;
}
int f2(int k)
{
 int i;
 if(k>n)
 sum++;
 else
    for(i=1;i<=n;i++)
    {a[k]=i;
  if(f1(k))
   f2(k+1);}
    return sum;
}
int main(void)
{
 scanf("%d",&n);
 printf("%d\n",f2(1));
 return 0;
}

C++(g++ 7.5.0) 解法, 执行用时: 2ms, 内存消耗: 492K, 提交时间: 2023-02-03 12:20:39

#include <bits/stdc++.h>
using namespace std;
int a[]={0,1,0,0,2,10,4,40,92,352,724,2680,14200};
int main(){
    int n;cin>>n;
    cout<<a[n];
}
//xxx

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 440K, 提交时间: 2022-09-02 22:52:40

#include <bits/stdc++.h>
using namespace std;
int a[]={0,1,0,0,2,10,4,40,92,352,724,2680,14200};
int main(){
    int n;cin>>n;
    cout<<a[n];
}

上一题