各大计算机公司 笔试及面试 题目 - 深信服(八皇后问题)

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n =
1 或 n ≥ 4 时问题有解。

在n×n格的棋盘上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,求解满足条件的棋盘布局。

n-皇后问题是典型的可以使用回溯算法求解的问题。如果你明白了问题的具体执行过程,也就对该问题的特点有了把握,从而选择合适的算法去求解。

以8-皇后问题为例,假设皇后所在的行用变量row表示,对应的列使用数组column[row]表示。

使用回溯算法执行的过程如下:

(1)第一次放置第1个皇后

将第1个皇后放在第0行第0列,即row=0,column[row]=column[0],如图所示:

第1个皇后放置在坐标(0,0)处。

(2)第一次放置第2个皇后

因为第1个皇后已经放好,第1个皇后放置到第0行第0列,从第1个皇后下方的格子开始判断。第2个皇后位于第1行,则row=1:

当column[row]=column[1]=0时,与第1个皇后在同一列上,冲突,继续后移到下一列(即column[row]++);

当column[row]=column[1]=1时,与第1个皇后在同一对角线上,冲突,继续后移到下一列(即column[row]++);

当column[row]=column[1]=2时,与第1个皇后不在同一行、同一列、同一对角线上,故放置第2个皇后。

如图所示:

第2个皇后放置在坐标(1,2)处。

(3)第一次放置第3个皇后

因为第2个皇后已经放好,第2个皇后放置到第1行第2列,从第2个皇后下方的格子开始判断。第3个皇后位于第2行,则row=2:

当column[row]=column[2]=0时,与第1个皇后在同一对角线上,冲突,继续后移到下一列(即column[row]++);

当column[row]=column[2]=1时,与第2个皇后在同一对角线上,冲突,继续后移到下一列(即column[row]++);

当column[row]=column[2]=2时,与第2个皇后在同一列上,冲突,继续后移到下一列(即column[row]++);

当column[row]=column[2]=3时,与第2个皇后在同一对角线上,冲突,继续后移到下一列(即column[row]++);

当column[row]=column[1]=4时,与第1、2个皇后不在同一行、同一列、同一对角线上,故放置第3个皇后。

如图所示:

第3个皇后放置在坐标(2,4)处。

(4)第一次放置第4个皇后

如图所示:

第4个皇后放置在坐标(3,1)处。

(5)第一次放置第5个皇后

如图所示:

第4个皇后放置在坐标(4,3)处。其余依次类推。

代码如下:

备注:转载于 http://hi.baidu.com/shirdrn/blog/item/2720311b5cc970108618bfb1.html

时间: 2024-11-05 18:50:41

各大计算机公司 笔试及面试 题目 - 深信服(八皇后问题)的相关文章

各大计算机公司 笔试及面试 题目 - 阿里巴巴、深信服(Linux的启动流程 V3)

· 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了. 启动第二步--读取MBR 众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信

各大计算机公司 笔试及面试 题目 - 腾讯

1.把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间. 2.求N!后面0的个数.

C/C++ 笔试、面试题目大汇总 [转]

1.求下面函数的返回值(微软) int func(x) {    int countx = 0;    while(x)    {          countx ++;          x = x&(x-1);     }    return countx; }   假定x = 9999. 答案:8 思路:将x转化为2进制,看含有的1的个数. 2. 什么是"引用"?申明和使用"引用"要注意哪些问题? 答:引用就是某个目标变量的"别名"

关于南京外包公司的面试题目……偶要去笔试啊,弱弱的

问题描述 下周就要去面试了,说了是先来个笔试再面试,弱弱的问问--笔试题一般都是些什么题目啊?分别是文思.上海易保和软通动力--大家给点意见啊 解决方案 解决方案二:网上找一下呗解决方案三:基础题编程题智力题就这

2016届360公司PHP服务端开发笔试和面试之所得所感

        这是一篇叙述自己在360公司参加笔试和面试的过程,可能面试的职位并不是你所学的方向,但是如果你能从中学到些什么或者吸取我的教训,那么作者就非常知足了.本着"学习别人是怎么失败的,活着出来的人才能成功"的目标,我从三个方面进行叙述:         第一部分:360公司笔试题         第二部分:面试过程         第三部分:注意事项及心得体会         同时,真心感谢360公司,我非常向往的一个公司.也非常感谢给我面试的那位大哥,让我真的学到了很多东西

[笔试题目] 简单总结笔试和面试中的海量数据问题

        最近在笔试和面试中遇到了很多关于海量数据的问题,在此进行简单的记录,写一篇方便自己下次学习的处理海量数据的文章及在线笔记,同时也希望对你有所帮助.当然,海量数据最出名的还是七月July,但这里我是想直接从实际题目出发,并参考及摘抄了他们那些大牛的文章及自己的想法进行简单总结记录. 一. 原题重现         2015年9月27日百度笔试论述题二选一,其中第一道是关于MapReduce相关的:第二道是搜索引擎中url去重,海量数据集url如何在爬取过程中避免重复爬取过的url.

前端面试题目搜集

前端面试题目搜集 一.理论知识 1.1.讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 a. 域名解析 b. 发起TCP的3次握手 c. 建立TCP连接后发起http请求 d. 服务器端响应http请求,浏览器得到html代码 e. 浏览器解析html代码,并请求html代码中的资源 f. 浏览器对页面进行渲染呈现给用户 参考<一次完整的HTTP事务是怎样一个过程>   1.2.谈谈你对前端性能优化的理解 a. 请求数量:合并脚本和样式表,CSS Sprites,拆分初始化负载,划分主

Java语言基础相关的面试题目

常见的Java开发面试题目 1.CGLIB 和 JDK生成动态代理类的区别.JDK动态代理只能对实现了接口的类生成代理,而不能针对类 CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 2.HashMap.HashTable和concurrentHashMap的区别,HashMap的底层实现.1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样.2.HashTable不允许nu

服务器开光师是个什么鬼?TalkingData的研发面试题目

TalkingData是一家对数据有信仰的公司,致力于用数据去改变人们做决定的方式,并帮助人们更加了解周围的环境. 4年坚守大数据的前沿阵地,我们遇到无数的挑战.这里我们也向如下有志之士发出邀请,有意者请发简历至wenfeng.xiao@tendcloud.com: 大数据工程师/架构师 Java开发工程师/架构师 Html5/web前端开发 iOS/安卓SDK开发 机器学习研究员 DevOps/运维开发 程序猿鼓励师 服务器开光师 对于这些职位,我们通常有如下的面试题目. 大数据工程师 1.