n皇后问题——关于斜线的编号
题目大意:在n*n的棋盘中,放置n个皇后(同一行、同一列、同一斜线,只有一个皇后)
这道题是一道非常经典的dfs模板题,同一行、同一列的判断不是很难,但同一斜线有一定的难度,下面给出关于斜线编号的解决方法
我们就先以4*4的棋盘为例
我们把被标红的这一条暂且称之为主对角线
观察一下主对角线上的点坐标规律
我们发现主对角线上的点的坐标(x,y)满足x==y
下面看看其他的斜线有怎样的性质
在蓝色这条斜线上的坐标(x,y)满足x-y==1
在粉色这条斜线上的坐标(x,y)满足x-y==-1
同样的,我们也可以吧主对角线的坐标(x,y)表示为x-y==0
所以可以用x-y来计算斜线的编号
x-y的值是从(-4+1)~(4-1)
但是数组下标(在c++)没有负数,所以我们把x-y+n当做数组下标,编号从1~(2*4-1)
同样的,对于n*n的棋盘,共有2n+1条左斜线,我们可以把向左倾斜的斜线编号为(x-y+n)
下面来解决一下向右倾斜的斜线编号(还是以4*4的棋盘为例)
不难看出,在标红的这条向右倾斜的主对角线上点的坐标满足x+y==5
在粉色的这条斜线上x+y==4
在蓝色的这条斜线上x+y==6
同样的,向右倾斜的斜线共有(2*4-1)条,按照x+y来编号,编号为2~8,因为我们普遍采用从1开始的数组下标
所以我们用(x+y-1)当做数组下标,范围是1~7
同样的,对于n*n的棋盘,共有2n+1条右斜线,我们可以把向右倾斜的斜线标号为(x+y-1)
n皇后问题——关于斜线的编号的更多相关文章
- N皇后问题【递归求解】
n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案. 输入一个正整数N,则程序输出N皇后问题的全部摆法.输出结果里的每一行都代表一种摆法.行里的第i个数字 ...
- 带你轻而易举的学习python——八皇后问题
首先我们来看一下这个著名的八皇后问题 八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 在这个问题提出之后人们又将 ...
- n皇后问题_回溯法
具体问题如下图 先看一下4*4的回溯过程 程序结束条件: 一组解:设标志,找到一解后更改标志,以标志做为结束循环的条件. 所有解:k=0 判断约束函数判断第k个后能不能放在x[k]处 两个皇后不能放在 ...
- 蓝桥--2n皇后问题(递归)--搬运+整理+注释
N皇后问题: #include <iostream> #include <cmath> using namespace std; int N; ];//用来存放算好的皇后位置. ...
- 8皇后问题SQL求解(回溯算法)
问题 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一 ...
- C#数据结构与算法系列(十四):递归——八皇后问题(回溯算法)
1.介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的经典案例,该问题是国际西洋棋棋手马克斯.贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即 任意两个皇后都不能处 ...
- Java 内功修炼 之 数据结构与算法(一)
一.基本认识 1.数据结构与算法的关系? (1)数据结构(data structure): 数据结构指的是 数据与数据 之间的结构关系.比如:数组.队列.哈希.树 等结构. (2)算法: 算法指的是 ...
- 经典算法问题的java实现 (二)
原文地址: http://liuqing-2010-07.iteye.com/blog/1403190 1.数值转换(System Conversion) 1.1 r进制数 数N的r进制可以表 ...
- HLOJ1361 Walking on the Grid II 矩阵快速幂
题目分析: 就当是一次记录吧,2013年绍兴市市赛的一题,重现赛当时我想递推可能是矩阵快速幂吧,但是这个递推公式真没推出来(赛后猛如虎系列),这题和第一题有联系又有区别,第一题的递推很简单,dp[i] ...
随机推荐
- 关于C#中遍历字符串中的每个字符的方法
解决方案 C#提供了两个方法用于遍历字符串. 1.第一个方法是foreach循环,这个方法快速且容易,但是与第二个方法相比它不太灵活.其使用方法如下: string testStr = "a ...
- laravel5.8笔记三:常用命令
创建控制器 php artisan make:controller Index/IndexController 创建模型 php artisan make:model Index/IndexContr ...
- CPU高速缓存行与内存关系 及并发MESI 协议
先来一个整体图 一. 大致关系: CPU Cache --> 前端总线 FSB (下图中的Bus) --> Memory 内存 CPU 为了更快的执行代码.于是当从内存中读取数据时,并不是 ...
- postgresql某进程占用cpu资源过高,降不下来
由于是开发阶段,所以并没有配置postgres的参数,都是使用安装时的默认配置,以前运行也不见得有什么不正常,可是前几天我的cpu资源占用突然升高.查看进程,发现有一个postgres的进程占用CPU ...
- 基于 SOA 概念 RPC 框架 的 消息中心 云部署 设计 漫谈
一.背景 假设有一个系统的最大并发量有2000TPS左右.同时该系统有闲时和忙时,希望可以随时进行拓展和削减服务能力,以节省服务器费用开销. 该系统能提供站内消息.短信.app消息.邮箱的一个消息系统 ...
- JS 浅谈函数柯里化,不明觉厉
在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.这个技术由 Christopher ...
- 异常:Project configuration is not up-to-date with pom.xml 解决方案
错误描述,在导入Maven项目后出现下面错误: Description Resource Path Location Type Project configuration is not up-to-d ...
- 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
- 编译wxWidgets
打开x64 Native Tools Command Prompt for VS 2017 cd wxWidgets-2.9.5\build\msw nmake -f makefile.vc TARG ...
- 16-1 ECMA5与ECMA6的函数定义
ECMA5: function Drag(id){ this.ele = document.getElementById(id); var that = this; this.ele.onmoused ...