#include <iostream>
bool CheckResult(int* queen,int num)
{//检查皇后摆法是否正确
//第一个参数传入皇后坐标数组,第二个参数传入皇后个数
for (int i = 0; i < num; i++)
{
for (int j = 0; j < i; j++)
{
if (queen[i] == queen[j] || (i-j) == (queen[i]-queen[j]) || (j-i) == (queen[i]-queen[j]))
{ //检查任两个皇后,如果在同一列或同一斜线上,摆法不正确
return false;
}
}
}
return true;
}
void ShowResult(int* queen, int num)
{ //显示结果
//第一个参数传入皇后坐标数组,第二个参数传入皇后个数
static int times = 0; //不同摆法方式计数
for (int i = 0; i < num; i++)
{
printf("(%d,%d) ",i+1,queen[i]+1);
}
printf(": %d\n",++times);
}
void Loop(int* queen,const int queen_num,int now_num)
{ //递归循环,遍历所有可能解
//第一个参数传入皇后坐标数组,第二个参数表示皇后个数,第三个参数表示目前的递归次数
if(now_num-->0) //还需要递归
{
for (queen[now_num] = 0; queen[now_num] < queen_num; queen[now_num]++)
{
Loop(queen,queen_num,now_num);
}
}
else //递归完成
{
if (CheckResult(queen,queen_num))
{ //如果解正确,则显示结果
ShowResult(queen,queen_num);
}
}
}
void FindQueen(int* queen,int queen_num)
{ //提供接口由外部函数调用
Loop(queen,queen_num,queen_num);
}
int main()
{ //主函数
const int queen_num = 8; //这里可填入任意值,便推广至N皇后
int queenVec[queen_num]; //储存皇后位置
FindQueen(queenVec,queen_num); //开始寻找解
std::cin.get(); //等待用户输入回车,此时可观察结果
return 0;
}
小波思基
- 粉丝: 86
- 资源: 1万+
最新资源
- 自制数据库迁移工具-C版-06-HappySunshineV1.5-(支持南大Gbase8a、PostgreSQL、达梦DM)
- 车载以太网IEEE 802 规范
- 基于java+springboot+mysql+微信小程序的开放实验室预约管理系统 源码+数据库+论文(高分毕业设计).zip
- 手机外观尺寸检测设备工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 基于java+springboot+mysql+微信小程序的流浪动物救助系统 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的企业内部员工管理系统 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的社区志愿者服务平台 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的社区物业信息管理系统 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的上门维修系统 源码+数据库+论文(高分毕业设计).zip
- 深度卷积神经网络在MNIST数据集上的应用
- 基于转子磁链模型的改进滑模观测器 1.对滑模观测器进行改进,采用与转速相关的自适应反馈增益,避免恒定增益导致的低速下抖振明显的问题; 2.区别传统滑模从反电势中提取位置和转速信息,改进滑模观测器中利用
- 汇编语言教程、案例与相关项目资源汇总
- 双工位手机外壳抛光机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- docker-ubuntu24.10-tesseract5.5.0
- 基于微信的高校教务管理系统设计与实现springboot.zip
- 中国剪纸微信小程序的设计与实现ssm.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈