数据结构算法之python实现八皇后问题

数据结构算法之python实现八皇后问题

  • 所谓八皇后问题就是在一张8*8的二位数组中在该数组的每一行(每一列)都放上一个棋,最终需要在这个二维数组上面放8个棋,且这8个棋要满足任意两个棋子之间不能出现在同一行或者同一列或者同一斜线上面,最后求出有多少种摆法

  • 实现的一个过程

    • 首先准备一个长度为8的列表,这里我使用的是用一个列表来表示
    • 过程:
      1. 最终的结果是打印该列表,结果有多少个就说明有多少种解法
      2. 假定我们要摆法的是这8个中的一个 记为n
      3. 当n=8(因为在列表中是以0开始的,所以n=8表示需要摆放第九个了)说明前面的8个已经都摆放好了我们就打印输出结果就行了
      4. 因为每一行都是从第一列开始摆法,并且需要和该行前面的所有行进行比较,看是否符合八皇后规则,如果符合我们就在这个列表记录该点存放了一个皇后
  • 代码

    class Queeu():
        def __init__(self):
            self.list = [0]*8
            self.count = 0
    
    
        def chek(self,n):
            if n==8:
    
                self.output()
                # 调用了多少次output就说明有多少种解法
                print(self.count)
                return
            for i in range(8):
                self.list[n] = i
                # 验证是否合法任意两个是否在同一行(不需要验证,因为我每次都会对n进行+1 致使他到了该行的下一行)同一列同一斜线
                if self.isValid(n):
                    self.chek(n+1)
    
    
        def isValid(self,n):
            """
            比较当前位置的皇后和他前面的皇后是否冲突i
            :param n: 第n个皇后
            :return: 和前面比较是否冲突
            """
            for i in range(n): 
                if self.list[i] == self.list[n] or abs(n-i) ==abs(self.list[n]-self.list[i]):
                    return False
            else:
                return True
    
        def output(self):
            self.count +=1
            for j in self.list:
                print(j,end=" ")
            print()
            # print(self.list)
    
    if __name__ == '__main__':
        queeu=Queeu()
        queeu.chek(0)
        # 例如结果有个列表[0,4,7,5,2,6,1,3]
        # 说明第一个皇后在1行1列  第二个皇后2行5列  第三个皇后3行8列  ..... 这就是为什么用列表来表示每个皇后摆放的位置
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值