MOOC清华《程序设计基础》第5章:八皇后问题-代码二
来源:互联网 发布:卡饭 知乎 编辑:程序博客网 时间:2024/06/07 13:59
代码二是清华大学出版社《程序设计基础》(第三版)中清华大学吴文虎老师的算法,从每一行来尝试放棋子。
//问题描述://在8×8的棋盘上,放置8个皇后,使两两之间互不攻击。所谓互不攻击是指://(1)不在棋盘的同一行;//(2)不在棋盘的同一列;//(3)不在棋盘的同一对角线上。#include <iostream> using namespace std;const int Normalize = 9; //用来统一数组下标int Num; //方案数int q[9]; //8个皇后所占用的行号 bool C[9]; //S[1]~S[8],当前列是否安全bool L[17]; //L[2]~L[16],(i - j)对角线是否安全bool R[17]; //R[2]~R[16],(i + j)对角线是否安全void Try(int row){for(int col = 1; col <= 8; col++)//依次尝试当前的8列位置{//判断拟放置皇后的位置是否安全if(C[col] && L[row - col + Normalize] && R[row + col]){//记录位置信息(行号)q[row] = col;//修改三个方向的安全性标记C[col] = false;L[row - col + Normalize] = false;R[row + col] = false;//核心技巧其实在后面这两行里,只有这样调整,对角线的下标才//统一地从2到16,两个方向的平行对角线都是15条 if(row < 8){//递归尝试放下一行Try(row + 1);}else{Num++;cout << "方案" << Num << ":";for(int k = 1; k <= 8; k++)cout << q[k] << " ";cout << endl;}//回溯:恢复三个方向原有安全性C[col] = true;L[row - col + Normalize] = true; R[row + col] = true;} } } int main(){Num = 0;for(int i = 0; i < 9; i++)C[i] = true;for(int i = 0; i < 17; i++){L[i] = true;R[i] = true;}Try(1); //从第1行开始放皇后return 0; }
与代码一一样,代码二的结果也是92种解法。
阅读全文
0 0
- MOOC清华《程序设计基础》第5章:八皇后问题-代码二
- MOOC清华《程序设计基础》第5章:八皇后问题-代码一
- MOOC清华《程序设计基础》第5章第2题:破损棋盘的八皇后问题
- MOOC清华《程序设计基础》第5章:分书问题-代码二
- MOOC清华《程序设计基础》第5章:N皇后问题(带矩阵输出)
- MOOC清华《程序设计基础》第5章:青蛙过河问题
- MOOC清华《程序设计基础》第5章:分书问题-代码一
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法二)
- MOOC清华《程序设计基础》第1章第5题:银行存款问题
- MOOC清华《程序设计基础》第2章第5题:银行存款问题2
- MOOC清华《程序设计基础》第5章:归并排序
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法二)
- MOOC清华《程序设计基础》第5章:数字旋转方阵的填充-算法二
- MOOC清华《程序设计基础》第6章第1题:n级台阶问题(递推法)
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(递归法)
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(动态规划)
- MOOC清华《程序设计基础》第4章:折半插入排序(测试代码版)
- MOOC清华《程序设计基础》第4章:筛法求素数
- SharePoint 2016:找不到 Project Web App 实例。请在访问此页面之前至少创建一个 PWA 实例。
- 深机笔记
- 常用数据库
- Connection closed by foreign host. Disconnected from remote host
- UDP中recvfrom函数与sendto函数分析
- MOOC清华《程序设计基础》第5章:八皇后问题-代码二
- spark sql基本使用方法介绍(转载)
- WIN32 程序中支持MFC的窗口
- 【转】yii2的事件机制
- Sublime Text 3 快捷键精华版
- Qt中图像类QImage,QPixmap
- 一颗初来炸道的洋芋
- Wall
- 使用Gitlab创建git项目