当前位置: 首页 > 编程笔记 >

python 示例分享---逻辑推理编程解决八皇后

王才
2023-03-14
本文向大家介绍python 示例分享---逻辑推理编程解决八皇后,包括了python 示例分享---逻辑推理编程解决八皇后的使用技巧和注意事项,需要的朋友参考一下

可以和Haskell , Prolog 一样做到模式匹配,

建立逻辑推到规则,描述问题,得出答案。

from pyDatalog import pyDatalog

pyDatalog.create_atoms( 'N, N1, X, Y, X0, X1, X2, X3, X4, X5, X6, X7' )
pyDatalog.create_atoms( 'ok, queens, next_queen, pred, pred2' )

size = 8
ok( X1, N, X2 ) <= ( X1 != X2 ) & ( X1 != X2 + N ) & ( X1 != X2 - N )

pred( N, N1 )  <= ( N > 1 ) & ( N1 == N - 1 )
queens( 1, X ) <= ( X1._in( range( size ) ) ) & ( X1 == X[0] )
queens( N, X ) <= pred( N, N1 ) & queens( N1, X[:-1] ) & next_queen( N, X )

pred2( N, N1 )   <= ( N > 2 ) & ( N1 == N - 1 )
next_queen( 2, X ) <= ( X1._in( range( 8 ) ) ) & ok( X[0], 1, X1 ) & ( X1 == X[1] )
next_queen( N, X ) <= pred2( N, N1 ) & next_queen( N1, X[1:] ) & ok( X[0], N1, X[-1] ) 

print( queens( size, ( X0, X1, X2, X3, X4, X5, X6, X7 ) ) )
 类似资料:
  • 本文向大家介绍Python解决八皇后问题示例,包括了Python解决八皇后问题示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python解决八皇后问题的方法。分享给大家供大家参考,具体如下: 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。

  • 本文向大家介绍python八皇后问题的解决方法,包括了python八皇后问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了python八皇后问题的解决方法,供大家参考,具体内容如下 题目: 给定一个 N*N 正方形棋盘,在上面放置 N个棋子,又叫皇后,使每两个棋子都不在同一条横线上、竖线上、斜线上。一般我们都讨论8皇后,但是只要N > 4,都会存在解的。 分析: 方法1:根据

  • 本文向大家介绍Python实现八皇后问题示例代码,包括了Python实现八皇后问题示例代码的使用技巧和注意事项,需要的朋友参考一下 八皇后问题描述 问题: 国际象棋棋盘是8 * 8的方格,每个方格里放一个棋子。皇后这种棋子可以攻击同一行或者同一列或者斜线(左上左下右上右下四个方向)上的棋子。在一个棋盘上如果要放八个皇后,使得她们互相之间不能攻击(即任意两两之间都不同行不同列不同斜线),求出一种(进

  • 本文向大家介绍Python八皇后问题解答过程详解,包括了Python八皇后问题解答过程详解的使用技巧和注意事项,需要的朋友参考一下 最近看Python看得都不用tab键了,哈哈。今天看了一个经典问题--八皇后问题,说实话,以前学C、C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的时候碰到的。八皇后问题是说要在一个棋盘上放置8个皇后,但是不能发生战

  • 本文向大家介绍八皇后问题的相关C++代码解答示例,包括了八皇后问题的相关C++代码解答示例的使用技巧和注意事项,需要的朋友参考一下 八皇后问题即指在一个8*8的棋盘上放置8个皇后,不允许任何两个皇后在棋盘的同一行、同一列和同一对角线上。关键字:递归、上溯.通用技巧: 经观察发现,对8 x 8的二维数组上的某点a[i][j](0<=i,j<=7) 其主对角线(即左上至右下)上的每个点的i-j+7的值

  • 本文向大家介绍Lua编程示例(七):协同程序基础逻辑,包括了Lua编程示例(七):协同程序基础逻辑的使用技巧和注意事项,需要的朋友参考一下 输出结果: