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

 更新时间:2014年07月20日 15:54:26   投稿:hebedich  
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

可以和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实现图像的傅里叶变换,感兴趣的可以了解一下
    2021-12-12
  • python xpath获取页面注释的方法

    python xpath获取页面注释的方法

    今天小编就为大家分享一篇python xpath获取页面注释的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 使用Python的判断语句模拟三目运算

    使用Python的判断语句模拟三目运算

    这篇文章主要介绍了使用Python的判断语句模拟三目运算,Python中没有类似C语言那样的三目运算符,不过可以进行简单地模拟实现,需要的朋友可以参考下
    2015-04-04
  • Dockerfile构建一个Python Flask 镜像

    Dockerfile构建一个Python Flask 镜像

    这篇文章主要介绍了Dockerfile构建一个Python Flask 镜像,对正在学习的你有一定的参考价值,需要的小伙伴可以参考一下
    2022-01-01
  • Python中循环后使用list.append()数据被覆盖问题的解决

    Python中循环后使用list.append()数据被覆盖问题的解决

    这篇文章主要给大家介绍了关于Python中循环后使用list.append()数据被覆盖问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法

    Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法

    这篇文章主要介绍了Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法,需要的朋友可以参考下
    2016-04-04
  • 详解Python 关联规则分析

    详解Python 关联规则分析

    这篇文章主要介绍了Python 关联规则分析的相关资料,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • python按综合、销量排序抓取100页的淘宝商品列表信息

    python按综合、销量排序抓取100页的淘宝商品列表信息

    这篇文章主要为大家详细介绍了python按综合、销量排序抓取100页的淘宝商品列表信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Python测试人员需要掌握的知识

    Python测试人员需要掌握的知识

    很多朋友都想做了个python的测试人员,那么python测试员需要知道的基本知识有哪些呢?跟着小编一起学习下。
    2018-02-02
  • 利用Python为女神制作一个专属网站

    利用Python为女神制作一个专属网站

    520不知道送什么礼物?快跟随小编一起学习一下如何利用Python语言制作一个专属的网站送给女神吧!文中的示例代码讲解详细,需要的可以参考一下
    2022-05-05

最新评论