算法之八皇后问题的解决方法

hustyan 2018-06-16 原文

算法之八皇后问题的解决方法

问题描述: 在国际象棋棋盘上,棋盘是8*8的,皇后可以吃掉其同一行列以及斜线方向的棋子,在这张棋盘上可以有多少种8个皇后的摆放方法,能够让各个皇后都不能吃掉其他皇后。

求解思路:回溯与递归算法 python

  1.确定并调试检测函数,检测函数的作用是检查当前加入的新皇后是否符合要求

1 def check(quene_list ,listnum):
2     for i in range(listnum):
3         if abs(quene_list[listnum]-quene_list[i]) == listnum - i or quene_list[listnum] == quene_list[i]:
4          # 当条件成立时说明新加入的皇后会被攻击到
5             return 0
6     return 1

  2.递归回溯   判断终止条件是当计算到最后一列时,首先确定第n列加入棋盘不会产生冲突,在第n+1列加入皇后,若不冲突则递归计算下一个。在思想上有点像数学归纳法。

 1 def quene(quene_list, listnum, num):
 2     global solve_num
 3     if listnum == num:
 4         solve_num = solve_num + 1
 5         print(quene_list)
 6         return 1
 7     else:
 8         for i in range(num):
 9             quene_list[listnum] = i
10             if check(quene_list, listnum):
11                 quene(quene_list,listnum+1,num)

  3.用python实现八皇后问题的完整代码

 1 # -*- coding: utf-8 -*-
 2 #   八皇后问题的求解,递归回溯问题
 3 
 4 import math
 5 
 6 solve_num = 0
 7 
 8 def check(quene_list ,listnum):
 9     for i in range(listnum):
10         if abs(quene_list[listnum]-quene_list[i]) == listnum - i or quene_list[listnum] == quene_list[i]:
11          # 当条件成立时说明新加入的皇后会被攻击到
12             return 0
13     return 1
14 
15 def quene(quene_list, listnum, num):
16     global solve_num
17     if listnum == num:
18         solve_num = solve_num + 1
19         print(quene_list)
20         return 1
21     else:
22         for i in range(num):
23             quene_list[listnum] = i
24             if check(quene_list, listnum):
25                 quene(quene_list,listnum+1,num)
26 
27 if __name__ == "__main__":
28     quene_list = [0, 0, 0, 0, 0, 0, 0, 0,0]
29     num = 9
30     quene(quene_list,0, 8)
31     print(solve_num)

View Code

 

posted on 2018-06-16 21:59 知行合一,三省吾身 阅读() 评论() 编辑 收藏

 

 
版权声明:本文为hustyan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hustyan/p/9191556.html

算法之八皇后问题的解决方法的更多相关文章

  1. 面向对象三大特性之继承

    1:继承,顾名思义就是子代继承父辈的一些东西,在程序中也就是子类继承父类的属性和方法。 1 #Author : […]...

  2. python 学习笔记二十 django项目bbs论坛

     项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展 […]...

  3. ParisGabriel:Python全栈工程师(0基础到精通)教程 第二十一课(包、模块 的导入)

        ParisGabriel                每天坚持手写  一天一篇  决定坚持几年 为了 […]...

  4. 【算法】小白的算法笔记:快速排序算法的编码和优化

    【参考资料】   《算法(第4版)》          — — Robert Sedgewick, Kevin […]...

  5. Python多线程笔记(二)

    Lock对象 原语锁(互斥锁)是一个同步原语,状态是”已锁定”或者”未锁定 […]...

  6. 11. 盛最多水的容器

    题目描述 给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。 […]...

  7. python线程

    python 线程消息队列# 队列的概念创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递队列:先进先出(使用频率很高)堆栈:先进后出(特定常见下用)'''Queue([maxsize])...

  8. Python – 开发短视频资讯平台作业

    目录 需求 分页示例代码 示例代码 video.csv 返回Python目录 需求 需求参考 有video.c […]...

随机推荐

  1. Windows 10 正式版原版ISO镜像

    Win10正式版32位简体中文版(含家庭版、专业版)文件名: cn_windows_10_multiple_e […]...

  2. ID转名称到手方案01

    ID转名称到手方案01 好久没有写技术文章了,那就重新捡起来,从今天开始,分享这段时间的收获吧 其实很多时候, […]...

  3. 失败——阿里校招内推电话面试总结

    本着想试试自己水平的想法,参加了阿里校招提前批的校园招聘。结果昨天上午就突然来了个电话面试,让我一下子不知所措 […]...

  4. 深圳买车上牌流程

    今年5月份的时候,突然中了狗屎运。在深圳小汽车增量计划2020年第五期中以0.23%的概率中签了深圳小汽车增量 […]...

  5. 你所不知道的15个Axure使用技巧

    转自:http://www.mrven.com/?p=678 Axure 6.5已于4月18日发布,可直到上周 […]...

  6. hibernate解读之session–基于最新稳定版5.2.12

    前言 hibernate是一个实现了JPA标准的,用于对象持久化的orm框架。博主近一年开发都在使用。 前段时 […]...

  7. 如何撰写较受欢迎的技术文章

    如何撰写较受欢迎的技术文章 本来我这篇文章的标题是 “如何撰写受欢迎的技术文章”,但反 […]...

  8. 基本数据类型 int float str

    一.数字型1.整型 int======================================基本使用 […]...

展开目录

目录导航