C语言:最简单方法实现八皇后问题
八皇后问题(英文:Eight queens),是由国际象棋棋手马克斯·贝瑟尔于1848年提出的问题
在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
思路分析:
1.先把第一个皇后放在第一行第一列;
2.将第二个皇后放在第二行第一列,判断是否可行,若不可行, 跳过本次循环,放到第二列判断,依次类推,找到合适位置;
3.继续放三皇后,还是从第一列、第二列......直到第八个皇后也能放在一个不冲突的位置,这样就找到了一个正确的解;
4.依次循环
该方法为循环嵌套方法,思路简单容易实现,但程序效率太低有待改进。
int main()
{int count = 0;for (int q1 = 0; q1 < 8; q1++) {{for (int q2 = 0; q2 < 8; q2++) {if (q1 == q2 || q2 + 1 == q1 || q2 - 1 == q1)continue;for (int q3 = 0; q3 < 8; q3++) {if (q3 == q1 || q3 + 2 == q1 || q3 - 2 == q1 ||q3 == q2 || q3 + 1 == q2 || q3 - 1 == q2)continue;for (int q4 = 0; q4 < 8; q4++) {if (q4 == q1 || q4 + 3 == q1 || q4 - 3 == q1 ||q4 == q2 || q4 + 2 == q2 || q4 - 2 == q2 ||q4 == q3 || q4 + 1 == q3 || q4 - 1 == q3)continue;for (int q5 = 0; q5 < 8; q5++) {if (q5 == q1 || q5 + 4 == q1 || q5 - 4 == q1 ||q5 == q2 || q5 + 3 == q2 || q5 - 3 == q2 ||q5 == q3 || q5 + 2 == q3 || q5 - 2 == q3 ||q5 == q4 || q5 + 1 == q4 || q5 - 1 == q4)continue;for (int q6 = 0; q6 < 8; q6++) {if (q6 == q1 || q6 + 5 == q1 || q6 - 5 == q1 ||q6 == q2 || q6 + 4 == q2 || q6 - 4 == q2 ||q6 == q3 || q6 + 3 == q3 || q6 - 3 == q3 ||q6 == q4 || q6 + 2 == q4 || q6 - 2 == q4 ||q6 == q5 || q6 + 1 == q5 || q6 - 1 == q5)continue;for (int q7 = 0; q7 < 8; q7++) {if (q7 == q1 || q7 + 6 == q1 || q7 - 6 == q1 ||q7 == q2 || q7 + 5 == q2 || q7 - 5 == q2 ||q7 == q3 || q7 + 4 == q3 || q7 - 4 == q3 ||q7 == q4 || q7 + 3 == q4 || q7 - 3 == q4 ||q7 == q5 || q7 + 2 == q5 || q7 - 2 == q5 ||q7 == q6 || q7 + 1 == q6 || q7 - 1 == q6)continue;for (int q8 = 0; q8 < 8; q8++) {if (q8 == q1 || q8 + 7 == q1 || q8 - 7 == q1 ||q8 == q2 || q8 + 6 == q2 || q8 - 6 == q2 ||q8 == q3 || q8 + 5 == q3 || q8 - 5 == q3 ||q8 == q4 || q8 + 4 == q4 || q8 - 4 == q4 ||q8 == q5 || q8 + 3 == q5 || q8 - 3 == q5 ||q8 == q6 || q8 + 2 == q6 || q8 - 2 == q6 ||q8 == q7 || q8 + 1 == q7 || q8 - 1 == q7)continue;count++;printf("%d,%d,%d,%d,%d,%d,%d,%d\n", q1, q2, q3,q4,q5,q6,q7,q8);}}}}}}}}}printf("%d\n", count);return 0;}
C语言:最简单方法实现八皇后问题相关推荐
- 运用全排列的方法解决八皇后问题
运用全排列的方法解决八皇后问题,可以分为两部分:全排列和八皇后,下面我将分开说明两个步骤. 首先说明八皇后: 第一步:就是把皇后按照0到8编号,然后对八个皇后进行全排列,一共有40320种排列方式. ...
- 用全排列的方法解决八皇后问题
用百度搜索八皇后问题,几乎清一色都是用回溯,有兴趣的同学可参考:从全排列和八皇后问题谈回溯. 解决一个问题,我们应该充分利用已有的条件,化繁为简. $a=[0,1,2,3,4,5,6,7]; 可以看到 ...
- win10IE浏览器运行VBScript脚本语言的简单方法
小编我也是个学习网页的初学者,但是由于现在的浏览器几乎都不支持vbscript脚本语言.特地为大家送来最简单的操作方法! 1:首先准备好你要运行的带有vbscript脚本语言的html文件. 2:打开 ...
- 八皇后非递归算法c语言,要求;编写实现八皇后问题的递归解法或非递归解法,对于任意给定的一? 爱问知识人...
将下面程序改成运行后需要输入起始位置(第N行第M列)然后输出结果. #include #include enum Status {TRUE,FALSE}; //枚举状态 int matrix[ 将下面 ...
- C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法
偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...
- Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题
ML岗位面试:上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点-斐波那契数列.八皇后问题.两种LCS问题 Interview:算法岗位面试-上海某公司算法岗位(偏机器学 ...
- 数据结构 - 递归 回溯算法(八皇后问题)
游戏地址自己写完了可以根据结果去测试一下. 算法分析 八皇后问题算法思路分析 1)第一个皇后先放第一行第一列 2)第二个皇后放在第二行第一列.然后判断是否OK, 如果不OK,继续放在.第二列.第三列. ...
- Bailian2754 八皇后【回溯】
2754:八皇后 总时间限制: 1000ms 内存限制: 65536kB 描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格) ...
- Bailian2698 八皇后【回溯】
2698:八皇后问题 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和格式输出所有 ...
最新文章
- 几种典型的软件自动化测试框架
- MLP is Best?
- left join 、right join 、inner join和 full join的区别
- 怎样查看cudnn版本_ubuntu16.04+Geforce GTX1060安装CUDA和cuDNN
- c语言编译器环境,C语言教程:C环境设置
- php 定时推送,php定时自动发送新浪微博
- HDU 2079 (母函数)
- java程序员书单--成长之路--职业发展,你读过几本
- CMD指令-连接局域网主机
- 车厢调度(信息学奥赛一本通 - T1357)
- 第八章JRT/0197-2020金融数据安全数据安全分级指南解读
- 方舟手游服务器自动重启,方舟适者生存连接服务器重启怎么办_连接服务器重启解决方法_快吧单机游戏...
- 阿里的敏捷组织和中台策略有何不同?
- ELK 部署手册(docker版本)
- CVPR2021目标检测方向论文
- pacemaker+corosync+pcs
- 黄鸭兄《傲慢是精英的耻辱,谦虚是精英的责任》摘录
- 如何通过RGB值判断颜色深浅
- finereport企业微信集成总结
- 浅谈Robots.txt文件给网站带来的好处