8/27×18等于多少?

简单介绍了下Prolog的一些基本概念,今天我们来利用这些基本概念解决两个问题:数独八皇后问题。

 数独是一个很经典的游戏:

玩家需要根据n×n盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-n,不重复。

当然数独的阶有很多,9×9是最常见的,我们就以它做例子。在用Prolog解决之前先想想如果我们用C#或Java来做或怎么做?无非就是数据结构加算法,我们先得用一个数据结构表示数独,然后我们要在这个数据结构上“施加”算法进行求解。采用Prolog的第一步是相同的,我们得找一个数据结构表示数独,毫无疑问在Prolog中我们只能选择列表或元组,这里列表是更好的选择,因为列表可以进行[Head|Tail]解析,后面你就知道为什么了。我们像下面这样表示一个数独:

“_”代表未知的数字,需要玩家填空的地方。

接下来的步骤跟命令式语言就截然不同了,我们不是描述算法,而是要描述数独这个游戏的规则:

  1. 给定玩家一个9×9的盘面,玩家填充完所有的空格后最终的解仍然是这个9×9的盘面;
  2. 填充完空格后,每一个空格内的数字均在1~9之内;
  3. 填充完空格后,每一行9个数字各不相同;
  4. 填充完空格后,每一列9个数字各不相同;
  5. 填充完空格后,每一个宫格内的数字各不相同。

Ok,这就是整个游戏的规则。你可能觉得第一条规则没什么用,实际上第一条规则定义了“解”的形式,就像在C#中我们确定了方法的签名一样:

事实上这个规则已经可以工作了:

当然这只是第一步,这个规则对于输入的数独形式没有任何限制,事实上可以是任意的列表,Prolog都返回yes:

我们需要规定下数独的形式:

我们接着看第二条规则:“填充完空格后,每一个空格内的数字均在1~9之内” 。上一篇文章中我们介绍了Prolog中有一个内置谓词叫,这时候就可以派上用场了:

好了现在我们只能输入9×9并且每个每个位置上只能是1~9之间的数的列表了。

好了,现在到整个游戏的关键规则,事实上2,3,4这三个规则才决定了数独的难度,1,2只不过是基础,我们来统一考虑这三个问题。这里其实比想象的简单多了。我们首先要做的就是需要定义出来宫格

上一篇文章中我还提到一个谓词叫fd_all_different:检查列表中是否有重复元素,接下来我们只要证明每一列,每一行,每一个宫格列表内没有重复元素就可以了:

其实到此这个解数独的程序已经结束了,不过最后这几行代码太土了,我们可以采用用递归“优化”下,像下面这样:

不管你信不信,我们已经搞定了,最终完整的代码如下:


反正我信了,我们来试试吧,就以上面我从百度上找到的那个图为例:

美化后的结果是这样的:

Ok,有了数独问题作为铺垫,下面看八皇后问题应该就应该没那么难了,请保持用Prolog思考问题的方式,解决后你会发现Prolog真是这方面的“专家”,Let's Go!

八皇后问题也是一个非常经典的问题:

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

老套路我们先描述游戏规则。

  1. 每个皇后有一个行号和列号,行号和列号的取值范围在1~8之间;
  2. 一个棋盘上有八个皇后;
  3. 任意两个皇后不可以共享一行;
  4. 任意两个皇后不可以共享一列;
  5. 任意两个皇后不可以在同一个对角线上(左下角->右上角);
  6. 任意两个皇后不可以在同一个对角线上(右下角->左上角)。

在了解规则之后我们梳理一下这个问题,对照上面这个图:

我们给棋盘上每一个位置设定一个坐标(x,y),八个皇后的坐标分别为(x1,y1),(x2,y2)……我们以回溯的角度看问题,假设如图已经得到了最后解,那么这8个坐标满足:x1,x2……各不相同,y1,y2……个不相同,找出(x1,y1),(x2,y2)……中属于对角线1上的和对角线2上的位置,它们坐标应该个不相同。

所以整个问题的难点在于给定类似下面这样一个列表,我们需要找出其中的所有的行号,列号,和在对角线上的坐标:

找出行号和列号稍微简单点,这里直接给出答案,大家也可以自己思考下:

把上面的列表代进去简单验证下:

关键是如何验证对角线上的元素,而且两条对角线是不一样的,提醒下因为我们最后会还是会利用fd_all_different这个谓词。

好吧,我们回过头观察下上面那个棋盘的坐标图(注意我标红的地方),有没有发现什么规则呢?

  • 左上角到右下角的对角线上的元素:所有坐标的横坐标-纵坐标都相同,等于0;
  • 左下角到右上角的对角线上的元素:所有坐标的横坐标+纵坐标都相同,等于9;

OK,我们可以定义下面这样两个谓词diags1和diags2:

如果坐标在对角线上,那么抓取到的列表元素都是相等的。

好了,到目前为止我们已经完成了最难的部分,剩下的都是一些验证性工作。我们最终的“程序入口”应该是这样的:

我们还需要一些验证性工作:

1.给定列表里的皇后是不是合法的,即横纵坐标都在1~8之内,这用到了我上一篇中提到的member谓词:

2.验证给定的列表是不是八个皇后,这里用到一个length谓词,顾名思义:

3.需要递归的验证给定的列表中的每个元素是不是“皇后”:

Ok,下面就是八皇后问题的答案的完整代码:

没错,答案已经出来,但事实上上面这个程序运行的非常慢,我在我i7的笔记本上的GNU Prolog中执行下面这个问题,半天没有响应:

其实我们可以对这个问题进行一个简化。我们可以肯定棋盘上八行每行肯定有一个皇后,又因为互不能在一行,因此我们假设八皇后的坐标分别为:(1,A),(2,B),(3,C),(4,D),(5,E),(6,F),(7,G),(8,H)。那么我们可以对上面的代码进行优化,去掉所有对行的操作,优化后代码如下:

?后跟a可以一次性询问所有答案,可以看到还是相当的慢,这也算是声明式语言的一个劣势吧。

好了,今天介绍的两个问题就到此结束了。问题本身并不是重点,重点是我们思考问题的方式。 

最后提供:,希望大家可以喜欢Prolog这门小巧简单,功能强大的语言。

}

[机械/仪表]BQW系列矿用隔爆型潜污水电泵说明书

[版权声明] 本站所有资料由用户提供并上传,若内容存在侵权,请联系邮箱。资料中的图片、字体、音乐等需版权方额外授权,请谨慎使用。网站中党政主题相关内容(国旗、国徽、党徽)仅限个人学习分享使用,禁止广告使用和商用。

}

来源:互联网05-27编辑:MR阅读()

我学的是园林专科但自考过是汉语言文学考研是能选择园林吗/

理论上可以,实际上要看你想报考的学校,研究生招生简章

理论上:考研究生是,大专毕业满x年,具有大学本科同等学力(就是你的自考)

但关键是你考的学校说了算,去看看你的学校要求是如何

一名初中生,请问各位好心人想自考汉语言文学需要了解些什么?

可以 , 专11科 ,有 就看你吃的起苦不,这要看你的水平了 我看来一般要2年半

自考很苦 你要想好啊 我也是考汉语言的

很多东西 不是单单靠兴趣 最主要是坚持不懈

关于自考汉语言文学的问题

你好,自考不需要选择学校,专业与主考院校都对应的。二外课程自己根据考试计划选择,具体按照课程教材和考试大纲考试。

汉语言文学自考课程可以保留多久

你好,目前多数省市规定自考成绩长期有效,只要不是连续多年没有报考,已经通过的成绩不会作废。还有部分省市规定自考合格成绩有效期八年,从通过考试的时间算起。

函授会计可以参加自考汉语言文学吗?

是可以考的。只是你到时候得加考而已。具体的考试科目如下:

中国近现代纲要,马克思主义基本原理概论,英语二,中国古代文学史一,中国古代文学史二,中国现代文学史,语言学概论,外国文学史,美学,毕业论文;加考三门:古代汉语,现代汉语,中国文化概论。具体加考科目要以考试省份而定,我上面说的是以湖南为例子的。

汉语言文学教育(是教育)自考专科历年试卷去哪里找

你好, 自考真题及其答案可以网上看看有没有,自考答案是不好找的。一般自考辅导试卷有专门的历次考试试题的。自考书籍主要是教材、大纲和辅导书模拟题历次考试真题,可以网上试试,或是有卖那种历次考试真题的试卷的辅导资料的可以,或是模拟试题都是可以的。

山东自考汉语言文学本科考哪些科目?

山东自考汉语言文学(本科)课程设置

专业名称:汉语言文学(本科)

主考院校:山东师范大学、济南大学

课程设置及学分:本专业共设置11门和毕业论文

1、马克思主义政治经济学原理(3)

2、毛泽东思想概论(2)

3、英语(二)(14)

4、中国现代文学史(6)

5、中国古代文学史(一)(7)

6、中国古代文学史(二)(7)

10、中国现当代作家作品专题研究(4);中国文化概论(5),外国作家作品专题研究(4),中国古代文论选读(4),现代汉语语法研究(4),以上5门任选2门

1、电大的计算机网络专科毕业证,可以用来报考自考汉语言文学本科。

2、自考报名:需要去当地教育考试院(自考办)报名自考。有些地方要先在当地教育考试院网上进行网上报名,再到当地教育考试院自考办的现场点确认。

3、自考的整个流程是:预订或买教材(书)——拿到书,自己看书学习——自考报名(选择所要考的专业和课程)——按期参加考试……(按每年的自考周期循环前面各环节多次)……全部课程考出——申请毕业——拿到自考本科学历。(其中:先报名后考试是固定不变的;而先报名还是先买教材,考生根据情况可以自己灵活进行的)。

4、自考中所需的某门考试课程的教材(书)是指定的,一般在报名的地方预订或购买教材。也可以去别的地方购买自考教材,在当地省级教育考试院网(自考网)上是有教材信息(用书目录)发布的,您要按照这个教材用书目录中的教材信息,如书名、主编、出版社、版本等去买,请不要买错。

}

我要回帖

更多关于 15分等于多少时 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信