python解决八皇后问题的方法
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # @Time : 2018/9/11 15:40
- # @Author : Lijinjin
- # @Site :
- # @File : testQueens.py
- # @Software: PyCharm
- def conflict(state,nextX):
- '''
- :param state: state[] = {1,3,0,2}则表示皇后的位置分别在第一行第一个,第二行第三个,第三行第0个,第四行第2个
- state[i]表示列位置,已存在皇后的位置,后来的皇后与之比较
- :param nextX:nextX表示皇后的水平位置
- :return:是否冲突
- '''
- nextY = len(state) # 代表垂直位置
- for i in range(nextY):
- if abs(state[i]-nextX)in (0,nextY-i):
- return True
- return False
- def queens(num=4,state=()):
- for pos in range(num):
- if not conflict(state,pos):
- if len(state)==num-1:
- yield (pos,)
- else:
- '''
- 1.这里循环是为了将找到的位置通过下面的代码,加入到结果中。每一层执行都会加入新的元素
- 2.result就是为了拿到以前已有的位置,然后再加入函数最新计算出的pos(计算出之后并未立即加入的结果元组中)
- 3.在没有将皇后摆满的情况下,一旦发现皇后在当前行没用位置摆放,当层的函数即向上层返回,改变上层的pos值
- '''
- for result in queens(num,state+(pos,)): # 这里循环是为了将找到的位置通过下面的代码,加入到结果中。每一层执行都会加入新的
- yield (pos,)+result
- print(list(queens(4)))
- print(len(list(queens(4))))
- def prettyprint(solution):
- def line(pos,length=len(solution)):
- return '. '*(pos)+'X '+'. '*(length-pos-1)
- for pos in solution:
- print(line(pos))
- import random
- prettyprint(random.choice(list(queens(4))))
python解决八皇后问题的方法的更多相关文章
- Python解决八皇后问题的代码【解读】
八皇后问题 来自于西方象棋(现在叫 国际象棋,英文chess),详情可见百度百科. 在西方象棋中,有一种叫做皇后的棋子,在棋盘上,如果双方的皇后在同一行.同一列或同一斜线上,就会互相攻击. 八皇后问题 ...
- Python解决八皇后问题
最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的 ...
- Python 解决八皇后问题
问题介绍 八皇后问题是一个以国际象棋为背景的问题:如何能够在 \(8\times8\) 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一 ...
- C语言解决八皇后问题
#include <stdio.h> #include <stdlib.h> /* this code is used to cope with the problem of ...
- 使用穷举法结合numpy解决八皇后问题
一般说到八皇后问题,最先想到的就是回溯思想,而回溯思想往往是需要递归来实现的. 计算机很善长做重复的事情,所以递归正和它的胃口,而我们人脑更喜观平铺直叙的思维方式.当 我们看到递归时,总想把递归平铺展 ...
- 回溯算法-C#语言解决八皇后问题的写法与优化
结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...
- python学习八皇后问题
0 # -*- coding: utf-8 -*- 1 import random #冲突检查,在定义state时,采用state来标志每个皇后的位置,其中索引用来表示横坐标,基对应的值表示纵坐标,例 ...
- python实现八皇后问题
import random def judge(state, nextX): #判断是否和之前的皇后状态有冲突 nextY = len(state) for i in range(nextY): if ...
- 八行代码解决八皇后问题(c++)
说的有点夸装,实际上并不只是巴航代码,加上前面的变量声明之类的一共有40多行的样子吧,好像是在知乎上看到的,现在有时间再把它写下来: 其中用到了一些c++11特性,例如lambda 以及给予范围的 f ...
随机推荐
- shell 监控
#!/bin/shsource /etc/profileserverName=$1dingDingName=$2 #获取内存情况memory=(`free | awk 'NR==2{print $2, ...
- 粒子群优化算法(PSO)的基本概念
介绍了PSO基本概念,以及和遗传算法的区别: 粒子群算法(PSO)Matlab实现(两种解法)
- kafka producer consumer demo(三)
我们在前面把集群搭建起来了,也设置了kafka broker的配置,下面我们用代码来实现一下客户端向kafka发送消息,consumer端从kafka消费数据.大家先不要着急着了解 各种参数的配置,先 ...
- AtCoder M-SOLUTIONS 2019 Task E. Product of Arithmetic Progression
problem link Official editorial: code: int main() { #if defined LOCAL && !defined DUIPAI ifs ...
- dfs/bfs专项训练
A.棋盘问题——poj1321 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 ...
- A + B for you again HDU - 1867(最大前缀&最大后缀的公共子缀&kmp删除法)
Problem Description Generally speaking, there are a lot of problems about strings processing. Now yo ...
- Spring Boot环境的安装
Eclipse 使用springboot框架 环境的安装 1.下载java1.8 ,安装并配置环境变量 环境变量增加java 的安装目录到环境变量中path中增加 %JAVA_HOME%/bin增加变 ...
- JAVA中线程到底起到什么作用!
这是javaeye上非常经典的关于线程的帖子,写的非常通俗易懂的,适合任何读计算机的同学. 线程同步 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread ...
- 牛客 197E 01串
大意: 给定01串, 单点修改, 询问给定区间$[l,r]$, 假设$[l,r]$从左往右得到的二进制数为$x$, 每次操作增加或减少2的幂, 求最少操作数使得$x$为0. 线段树维护2*2矩阵表示低 ...
- 关于typora换行的问题
neo4j> profile MATCH (liskov:Scientist { name:'Liskov' })-[:KNOWS]->(wing:Scientist)-[:RESEARC ...