zoukankan      html  css  js  c++  java
  • n后问题

    Description

    在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。

    Input

    输入的第一个为测试样例的个数T,接下来有T个测试样例。每个测试样例的只有一行一个数n ( n < 15 ),表示棋盘的大小。

    Output

    对应每个测试样例输出一行结果:可行方案数。

    Sample Input

    2
    3
    4

    Sample Output

    0
    2

    #include<iostream>
    #include<string.h>
    #include<cmath>
    using namespace std;
    const int NUM = 16;
    int x[NUM];
    int n; //棋盘的大小
    int sum; //当前找到的可行方法数
    inline bool place(int t){
        for(int i=1;i<t;i++){
            if((abs(t-i)==abs(x[i]-x[t]))||(x[i]==x[t])){
                return false;
            }
        }
        return true;
    }
    void Backtrack(int t){
        if(t>n){
            sum++;
        }
        else{
            for(int i=1;i<=n;i++){
                x[t]=i;
                if(place(t)) Backtrack(t+1);
            }
        }
    }
    int main(){
        int T;
        cin >> T;
        while(T--){
            cin >> n;
            sum = 0;
            memset(x,0,sizeof(x));
            Backtrack(1);
            cout << sum <<endl;
        }
    }
  • 相关阅读:
    9.16第一次上课关于HTML的小结
    9.22课堂记录
    9.19课堂记录
    html文档基本结构
    HTMl学习1
    HTML第一次学习笔记
    CSS3和CSS2.1的区别
    HTML5新元素
    第一课:HTML
    块级元素和行内元素
  • 原文地址:https://www.cnblogs.com/dichuan/p/8213613.html
Copyright © 2011-2022 走看看