zoukankan      html  css  js  c++  java
  • PAT 甲级 1128 N Queens Puzzle

    https://pintia.cn/problem-sets/994805342720868352/problems/994805348915855360

    The "eight queens puzzle" is the problem of placing eight chess queens on an 8×8chessboard so that no two queens threaten each other. Thus, a solution requires that no two queens share the same row, column, or diagonal. The eight queens puzzle is an example of the more general N queens problem of placing N non-attacking queens on an N×N chessboard. (From Wikipedia - "Eight queens puzzle".)

    Here you are NOT asked to solve the puzzles. Instead, you are supposed to judge whether or not a given configuration of the chessboard is a solution. To simplify the representation of a chessboard, let us assume that no two queens will be placed in the same column. Then a configuration can be represented by a simple integer sequence (Q1​​,Q2​​,,QN​​), where Qi​​ is the row number of the queen in the i-th column. For example, Figure 1 can be represented by (4, 6, 8, 2, 7, 1, 3, 5) and it is indeed a solution to the 8 queens puzzle; while Figure 2 can be represented by (4, 6, 7, 2, 8, 1, 9, 5, 3) and is NOT a 9 queens' solution.

    8q.jpg 9q.jpg
    Figure 1   Figure 2

    Input Specification:

    Each input file contains several test cases. The first line gives an integer K (1<K200). Then K lines follow, each gives a configuration in the format "Q1​​ Q2​​ ... QN​​", where 4N1000 and it is guaranteed that 1Qi​​N for all i=1,,N. The numbers are separated by spaces.

    Output Specification:

    For each configuration, if it is a solution to the N queens problem, print YES in a line; or NO if not.

    Sample Input:

    4
    8 4 6 8 2 7 1 3 5
    9 4 6 7 2 8 1 9 5 3
    6 1 5 2 6 4 3
    5 1 3 5 2 4
    

    Sample Output:

    YES
    NO
    NO
    YES

    时间复杂度:$O(1/2 * n^2)$ 
    代码:
    #include <bits/stdc++.h>
    using namespace std;
    
    int N;
    int a[1111], line[1111], row[1111];
    
    int main() {
        int K;
        scanf("%d", &K);
        while(K --) {
            scanf("%d", &N);
    
            for(int i = 1; i <= N; i ++) {
                scanf("%d", &a[i]);
            }
    
            memset(line, 0, sizeof(line));
            memset(row, 0, sizeof(row));
    
            for(int i = 1; i <= N; i ++) {
                line[a[i]] ++;
                row[i] ++;
            }
    
            bool flag = true;
            for(int i = 1; i <= N; i ++) {
                if(line[i] != 1 || row[i] != 1)
                flag = false;
            }
    
            for(int i = 2; i <= N; i ++) {
                for(int j = 1; j < i; j ++) {
                    if(abs(a[i] - a[j]) == abs(i - j))
                        flag = false;
                }
            }
    
            if(flag)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    Razor 视图引擎的一些属性和方法
    Asp.Net Mvc Razor
    微信小程序时代已经来临
    ionic常用命令记录
    ionic中将service中异步返回的数据赋值给controller的$scope
    nodejs连接mysql实例
    转载:ionic+nodejs开发遇到的跨域和post请求数据问题
    NodeJs-- 新建项目实例
    Bootstrap学习指南
    ios开发环境配置及cordova安装与常用命令
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/9528191.html
Copyright © 2011-2022 走看看