【题解】1128 N Queens Puzzle (20分)⭐⭐ 【思维】

【题解】1128 N Queens Puzzle (20分)⭐⭐ 【思维】

题意:

给出K个序列,判断每个序列是否为N皇后问题的一个解。注意给出的是竖轴的位置

题解:

因为给出的是竖轴,所以不用判断横轴。
这里固然也可以写一个大模拟,大判断,大循环去判断
但是仔细思考一下,只用判断对角线的话,利用 ∥ q u e e n [ i ] − q u e e n [ j ] ∣ = = ∣ i − j ∣ \|queen[i]-queen[j]|==|i-j| queen[i]queen[j]==ij这个公式不就好了
自己画个图理解一下,等腰三角形

经验小结:

判断永远比构造简单的多


#include
using namespace std;
#define ms(x, n) memset(x,n,sizeof(x));
typedef  long long LL;
const int INF = 1 << 30;
const int MAXN = 1010;

int Q, n, queen[MAXN];
bool judge(){
    for(int i = 1; i < n; ++i)
        for(int j = i+1; j <= n; ++j){
            if(queen[i]==queen[j] || abs(queen[i]-queen[j])==abs(i-j))
                return false;
        }
    return true;
}
int main() {
    cin >> Q;
    while(Q--){
        cin >> n;
        for(int i = 1; i <= n; ++i)
            cin >> queen[i];
        if(judge())
            cout << "YES\n";
        else
            cout << "NO\n";
    }
    return 0;
}

你可能感兴趣的:(【题解】1128 N Queens Puzzle (20分)⭐⭐ 【思维】)