• 1295 N皇后问题


    1295 N皇后问题

     

     时间限制: 2 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
     
    题目描述 Description

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

    输入描述 Input Description

     给定棋盘的大小n (n ≤ 13)

    输出描述 Output Description

     输出整数表示有多少种放置方法。

    样例输入 Sample Input

    8

    样例输出 Sample Output

    92

    数据范围及提示 Data Size & Hint

    n<=13

    (时限提高了,不用打表了)

    分类标签 Tags 点此展开 

     
     
    代码:
    #include<cstdio>
    using namespace std;
    #define N 101
    int a[N],b[N],c[N],d[N],n,tot;
    void go(int i){
        for(int j=1;j<=n;j++){//寻找放置皇后的位置
            if(!b[j]&&!c[i+j]&&!d[i-j+n-1]){//寻找放置皇后的位置 //由于C++不能操作负数组,因此考虑加n-1
                a[i]=j;//摆放皇后
                b[j]=1;//宣布占领第j列
                c[i+j]=1;//占领两个对角线
                d[i-j+n-1]=1;
                if(i==n) tot++;//n个皇后都放置好,一种情况 
                else go(i+1);//继续递归放置下一个皇后
                b[j]=0;//递归返回即为回溯一步,当前皇后退出
                c[i+j]=0;
                d[i-j+n-1]=0;
            }
        }
    }
    int main(){
        scanf("%d",&n);
        go(1);
        printf("%d
    ",tot);
        return 0;
    }
  • 相关阅读:
    OpenStack源码系列---neutron-server
    理解全虚拟、半虚拟以及硬件辅助的虚拟化
    QEMU+GDB调试方法
    SQL Server故障转移集群
    OpenStack源码系列---nova-conductor
    mysql 安装和基本使用
    数据库原理
    linux 计划任务
    linux 进程管理和内存分配

  • 原文地址:https://www.cnblogs.com/shenben/p/5561554.html
Copyright © 2020-2023  润新知