18124 N皇后问题

时间限制:2000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 编程题   语言: G++;GCC;VC

Description

有N*N的国际象棋棋盘,要求在上面放N个皇后,要求任意两个皇后不会互杀,有多少种不同的放法?

输入格式

每一个数为T,代表CASE的数量,T<=13
此后,每行一个数N(13>=N>0)

输出格式

每一个CASE,输出对应答案

输入样例

2
4
5

输出样例

2
10

作者

admin

  SCAU-N皇后问题—回溯。输入n,求出在n*n的棋盘上放置n个皇后可以有多少种解;就是一个八皇后问题,而且题目的n也非常的小,时间还给了2000ms,就算暴力回溯O(n^2)的复杂度都可以过。但这里介绍一个优化上的技巧。    皇后可以攻击到同行同列和两条对角线上的棋子,,那么肯定是一行行的放置,一行和一列都是只能放置一个棋子的。  在判断同列的时候,开一个row[MAXN+5]的数组来标记哪些列放置了皇后。  对于两个对角线;要判断是否已放有棋子,就只要再开个二维的数组diagonal[2][MAXN*2+5];   其中,y-x是主对角线,y+x是副对角线。 但y-x可能为负数,所以要写成y-x+n; 在判断到当前cur行上的位置j可以放置的话,就把diagonal[0][cur-j+n]和diagonal[1][cur+j]都标记为1 以此表示该条对角线上已经放置有棋子了。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <utility>
#include <vector>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; int row[],diagonal[][];//标记列和两条对角线的数组
int cnt,n;
void dfs(int cur)
{
if(cur==n+) //到达递归边界
{
cnt++;
return;
}
for(int i=;i<=n;i++)
{ //判断列上、两条对角线上是否已有棋子
if(!row[i]&&!diagonal[][cur+i]&&!diagonal[][cur-i+n])
{
row[i]=diagonal[][cur+i]=diagonal[][cur-i+n]=;
dfs(cur+);
row[i]=diagonal[][cur+i]=diagonal[][cur-i+n]=;
}
}
}
int main()
{
//freopen("input.txt","r",stdin);
memset(row,,sizeof(row));
memset(diagonal,,sizeof(diagonal));
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
cnt=;
dfs();
printf("%d\n",cnt);
}
return ;
}

18124 N皇后问题的更多相关文章

  1. 递归实现n(经典的8皇后问题)皇后的问题

    问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...

  2. 八皇后算法的另一种实现(c#版本)

    八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...

  3. [LeetCode] N-Queens II N皇后问题之二

    Follow up for N-Queens problem. Now, instead outputting board configurations, return the total numbe ...

  4. [LeetCode] N-Queens N皇后问题

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  5. N皇后问题—初级回溯

    N皇后问题,最基础的回溯问题之一,题意简单N*N的正方形格子上放置N个皇后,任意两个皇后不能出现在同一条直线或者斜线上,求不同N对应的解. 提要:N>13时,数量庞大,初级回溯只能保证在N< ...

  6. 数据结构0103汉诺塔&八皇后

    主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...

  7. N皇后问题

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

  8. LeetCode:N-Queens I II(n皇后问题)

    N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw ...

  9. 八皇后问题_Qt_界面程序实现

    //核心代码如下 //Queen--放置皇后 #include "queue.h" queue::queue() { *; ; this->board = new bool[ ...

随机推荐

  1. Vue开发入门看这篇文章就够了

    摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...

  2. Oracle备份Scott

    @echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...

  3. MarkDown流程图概要

    要素 流程元素定义: 名称=>类型: 显示名称 控制流程定义: 名称1([yes,no],right)->名称2 注意事项 流程元素定义在代码上部, 流程走向定义在代码下部 名称可以取中文 ...

  4. Django分页器及自定义分页器

    Django的分页器 view from django.shortcuts import render,HttpResponse # Create your views here. from app0 ...

  5. Spring boot (12) tomcat jdbc连接池

    默认连接池 tomcat jdbc是从tomcat7开始推出的一个连接池,相比老的dbcp连接池要优秀很多,spring boot将tomcat jdbc作为默认的连接池,只要在pom.xml中引入了 ...

  6. RunLoop相关知识

    RunLoop,翻译过来是运行环路.我们在创建命令行项目和创建ios项目时,发现命令行项目当最后一行代码执行完后项目就自动退出了,而ios项目确可以一直运行,知道用户手动点击退出按钮.这就是因为ios ...

  7. 九九乘法表---for循环的嵌套

    package com.zuoye.test;//控制台输出九九乘法表public class Jiujiu { public static void main(String[] args) { in ...

  8. centos6 或者 centos7 重置遗忘的root密码

    centos7 1.重启服务器. 2.在出现如下界面时,按“e”键,进入内核边界页面,如下图: 3.进入后,在“linux16”这行参数最后添加“rd.break”参数,输入完后,同时安装“ctrl” ...

  9. 【sqli-labs】 less41 GET -Blind based -Intiger -Stacked(GET型基于盲注的堆叠查询整型注入)

    整型的不用闭合引号 http://192.168.136.128/sqli-labs-master/Less-41/?id=1;insert into users(id,username,passwo ...

  10. [tyvj1957 Poetize5] Vani和Cl2捉迷藏 (最小路径可重点覆盖+二分图最大匹配)

    传送门 Description 这片树林里有N座房子,M条有向道路,组成了一张有向无环图. 树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔.如果从房子A沿着路走下去能够到达B,那么在 ...