C++/python解决无穷皇后问题
来源:互联网 发布:杭州java工资 编辑:程序博客网 时间:2024/06/05 11:50
C++实现
#include<iostream>using namespace std;int a[20]={0};int b[40]={0};int c[40]={0};int ans, n, m=0;void queen(int m){ if(m==n){ ans++; return; } for(int i=0;i<n;i++){ if( a[i]==0 && b[m-i+20]==0 && c[m+i]==0 ){ a[i]=1; b[m-i+20]=1; c[m+i]=1; queen(m+1); a[i]=0; b[m-i+20]=0; c[m+i]=0; } }}int main(){ cout << "请输入皇后个数:" << endl; cin >> n; queen(m); cout << "一共有" << ans << "种解法" << endl; return 0;}
代码解释:
数组a[20]存放的是当前列是否有皇后,在这里我们假定棋盘最大为20*20规格,事实上,当n=16时,我运行便会出现未响应状况
数组b[40]存放的是从左上到右下方向对角线是否有皇后,20*20的棋盘上有这个方向的对角线39条
数组c[40]存放的是从左下到右上方向对角线是否有皇后,同样有39条
递归的退出条件便是,已经放置n位皇后,当要放置第n+1位时,说明此时已放置的n皇后满足条件,结果+1,并返回
而递归的思想是:在第一行第一列放置皇后,此时对数组a,b,c进行标记,然后queen(2)表示准备在第二行放置皇后,我们假设,经过若干步骤之后,发现第二行所有位置都不行(即执行queen(2)完毕),此时说明第一行的皇后位置是不可行的,那么就要对第一行该皇后标记进行擦除,然后继续执行for循环,也就是在第一行第二个位置放置,以此类推
python实现
python实现的时候出现了几个小问题:(1)python里没有数组的数据结构 (2)也没有自增自减 (3)如果全局定义一个变量,然后在函数中使用并且改变了他的值,修改之后他就会变为局部变量,而解决办法就是使用global声明其全局变量身份
a=[0]*20b=[0]*40c=[0]*40ans=0m=0n=0def queen(m): global ans if m==n: ans+=1 return for i in range(n): if a[i]==0 and b[m-i+20]==0 and c[m+i]==0: a[i]=1 b[m-i+20]=1 c[m+i]=1 queen(m+1) a[i]=0 b[m-i+20]=0 c[m+i]=0 n=input('please input n:');queen(m)print '%d kinds of solution' %ans
阅读全文
0 0
- C++/python解决无穷皇后问题
- Python 解决 8 皇后问题
- c解决八皇后问题
- 使用Python生成器解决八皇后问题
- 八皇后问题用C语言解决
- C数组解决八皇后问题
- python基于右递归解决八皇后问题的方法
- Python利用遗传算法解决八皇后问题
- 利用python的生成器解决八皇后问题
- 八皇后问题——用Python解决
- 八皇后问题的解决(c语言)
- C#WPF实现回溯算法解决八皇后问题
- C语言用回溯解决八皇后问题
- 八皇后问题:递归解决/C语言(基础方法)
- python-八皇后问题
- Python八皇后问题
- python 八皇后问题
- python-八皇后问题
- JavaScript深入系列15篇正式完结!
- easyui combobox组合框使用简介(一)
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
- ace tree和前台表格 的学习笔记
- 自顶向下,逐步求精
- C++/python解决无穷皇后问题
- jQuery 遍历
- Fragment+Viewpager的预加载与懒加载
- jQuery 的几个插件
- css之margin相关的问题以及解决办法
- Zookeeper系列—集群安装
- java中数组的最大长度以及List的最大容量
- 初学者最常问的几个问题
- S12动态内存