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\n",tot);
    return 0;
}
时间: 2025-01-15 11:57:00

1295 N皇后问题的相关文章

[Wikioi 1295]N皇后问题---两种不同的解法(复习)

题目描述 Description 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上. 输入描述 Input Description 给定棋盘的大小n (n ≤ 13) 输出描述 Output Description 输出整数表示有多少种放置方法. 样例输入 Sample Input 8 样例输出 Sample Output 92 数据范围

深度优先搜索 之 CODE[VS] 1295 N皇后问题

/* dfs,关键:检查皇后会发生攻击的状态. 两种方法:(第二种,速度更快) (1)void Solve(int row, int colUsed); 常规办法,判断状态是否非法的方法:列上通过位运算:左斜.右斜通过遍历. (2)void SolveBitOperation(unsigned col, unsigned tiltLeft, unsigned tiltRight); 完全位运算,具体参考代码注释. 另外可参考Matrix67的博客(有图,很形象):http://www.matri

codevs 1295 N皇后问题

时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上. 输入描述 Input Description 给定棋盘的大小n (n ≤ 13) 输出描述 Output Description 输出整数表示有多少种放置方法. 样例

n皇后(方法数)

1295 N皇后问题 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold  题目描述 Description 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上. 输入描述 Input Description 给定棋盘的大小n (n ≤ 13) 输出描述 Output Description 输出整数表示有多少

去清北的第一天

值得一提,动态规划很重要 那么来上课的第一天,就讲了一道练手的很友善的题目,计数问题 1 3291 记数问题 2013年NOIP全国联赛普及组 2 时间限制: 1 s 3 空间限制: 128000 KB 4 题目等级 : 黄金 Gold 5 题解 6 题目描述 Description 7 试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1.2.3.4.5.6.7.8.9.10.11中,数字1出现了4次. 8 9 输入描述 Input Descripti

八皇后问题

#include <stdio.h> #include <stdlib.h> #define Maxsize 100 typedef struct node{ int _x; int _y; }chessman,*chess; static int cnt=0; static chessman c[Maxsize]; bool isOK(chess c,chessman cm,int c_len){ //判断是否能将当前皇后加入棋盘中 for(int i=0;i<c_len;

8皇后

#include <stdio.h>#include <math.h>#include <time.h>#define max 1000int sum=0;bool place (int k,int x[]){ for (int j=1;j<k;j++)if ((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) return false;return true;} void backtrack (int t,int x[],int

2n皇后问题

在蓝桥杯基础训练题中,出现这样一道题目: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一条对角线上.问总共有多少种放法?n小于等于8. 输入格式 输入的第一行为一个整数n,表示棋盘的大小. 接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后. 输出格式 输出一个整数,表示总

8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来探讨一下非递归方案 实验结果令人还是有些失望,原来非递归方案的性能并不比递归方案性能高 代码如下: package com.newflypig.eightqueen; import java.util.Date; /** * 使用循环控制来实现回溯,解决N皇后 * @author [email pr