【c++】求解八皇后问题


- #pragma once
- #include"Position.h"
- #include<vector>
- #include<array>
- using std::array;
- using std::vector;
- class QueenGame
- {
- private:
- const int SIZE = 9;
- int getCount;
- int count;
- Position* posArr;
- clsArr pA;
- vector<clsArr>vecResult;
- bool PosIsOK(int x, int y);
- public:
- QueenGame(int n = 8) {
- count = n;
- getCount = 0;
- posArr = new Position[count];
- }
- ~QueenGame() {
- delete[]posArr;
- }
- QueenGame(const QueenGame& q) {
- this->count = q.count;
- this->getCount = q.getCount;
- this->posArr = new Position[q.count];
- for (size_t i = 0; i < q.count; i++)
- {
- this->posArr[i] = q.posArr[i];
- }
- }
- const vector<clsArr> GetResult()const {
- return vecResult;
- }
- void Play(int x, int y);
- };
- #include "QueenGame.h"
- #include"Position.h"
- #include<math.h>
- bool QueenGame::PosIsOK(int x, int y) {
- for (size_t i = 0; i < count; i++)
- {
- Position pos = pA[i];
- if (pos.x <= 0 && pos.y <= 0) {
- continue;
- }
- if (x == pos.x || y == pos.y) {
- return false;
- }
- else {
- if (std::abs((x - pos.x) * 1.0 / (y - pos.y)) == 1) {
- return false;
- }
- }
- }
- return true;
- }
- void QueenGame::Play(int x, int y) {
- if (x >= SIZE && y >= SIZE) {
- return;
- }
- for (; y < SIZE; y++)
- {
- if (PosIsOK(x, y)) {
- Position pos(x, y);
- *(posArr + (getCount)) = pos;
- pA[getCount] = pos;
- ++getCount;
- if (x < SIZE - 1) {
- Play(x + 1, 1);
- }
- else {
- int sss = 0;
- if (getCount == count) {
- vecResult.push_back(pA);
- pA[--getCount].set(-1, -1);
- continue;
- }
- }
- }
- }
- if (getCount >= 0)
- {
- --getCount;
- posArr[getCount].set(-1, -1);
- pA[getCount].set(-1, -1);
- }
- return;
- }
运行:
- QueenGame qGame(8);
- qGame.Play(1,1);
- auto result= qGame.GetResult();
辅助类:


- struct Position
- {
- int x;
- int y;
- Position(int a, int b) {
- x = a;
- y = b;
- }
- Position() {
- x = -1;
- y = -1;
- }
- void set(int a, int b) {
- x = a;
- y = b;
- }
- };
- class clsArr {
- public:
- Position pos[8];
- Position& operator[](int i) {
- return pos[i];
- }
- };
【c++】求解八皇后问题的更多相关文章
- 用dfs求解八皇后问题
相信大家都已经很熟悉八皇后问题了,就是指:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法.主要思路:按行进行深度优先搜索,在该 ...
- java递归求八皇后问题解法
八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...
- 八皇后问题——列出所有的解,可推至N皇后
<数据结构>--邓俊辉版本 读书笔记 今天学习了回溯法,有两道习题,一道N皇后,一道迷宫寻径.今天,先解决N皇后问题.由于笔者 擅长java,所以用java重现了八皇后问题. 注意是jav ...
- 算法——八皇后问题(eight queen puzzle)之回溯法求解
八皇后谜题是经典的一个问题,其解法一共有种! 其定义: 首先定义一个8*8的棋盘 我们有八个皇后在手里,目的是把八个都放在棋盘中 位于皇后的水平和垂直方向的棋格不能有其他皇后 位于皇后的斜对角线上的棋 ...
- USACO 1.5.4 Checker Challenge跳棋的挑战(回溯法求解N皇后问题+八皇后问题说明)
Description 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子. 列号 0 1 2 3 4 5 6 ...
- Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
- OpenJudge1700:八皇后问题 //不属于基本法的基本玩意
1700:八皇后问题//搜索 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和 ...
- 回溯算法-C#语言解决八皇后问题的写法与优化
结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...
- VC版八皇后
一. 功能需求: 1. 可以让玩家摆棋,并让电脑推断是否正确 2. 能让电脑给予帮助(给出全部可能结果) 3. 实现悔棋功能 4. 实现重置功能 5. 加入点按键音效果更佳 二. 整体设计计: 1 ...
- 八皇后问题(C#)
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...
随机推荐
- RabbitMQ 04 直连模式-Java操作
使用Java原生的方式使用RabbitMQ现在已经较少,但这是基础,还是有必要了解的. 引入依赖. <dependency> <groupId>com.rabbitmq< ...
- 构筑立体世界,AR Engine助力B站会员购打造沉浸式营销
随着购物场景的逐渐多元化,越来越多电商平台把线下购物体验搬到线上,运用AR技术,跨越空间距离,帮助用户在购买前"体验"商品,增强购买意愿. 哔哩哔哩会员购(后称会员购)是B站于20 ...
- Ansible 学习笔记 - 批量巡检站点 URL 状态
前言 不拖泥带水,不东拉西扯. 速战速决,五分钟学到一个工作用得上的技巧. 通过一个个具体的实战案例,来生动演示 Ansible 的用法. 需求 我需要定期巡检或定时监控我公司的所有站点的首页的可用性 ...
- centos8 \CentOS 9 Stream rpm 安装mysql8.0.28
centos8 rpm 安装mysql8.0.28 检查 检测系统是否自带安装 MySQL 命令如下: rpm -qa | grep mysql 如果如下存在已安装的包,就需要卸载 mysql80-c ...
- 树莓派和esp8266之间使用tcp协议通信
树莓派代码: from flask import Flask, render_template import socket import threading app = Flask(__name__) ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-39-highlight() 方法之追踪定位
1.简介 在之前的文章中宏哥讲解和分享了,为了看清自动化测试的步骤,通过JavaScript添加高亮颜色,就可以清楚的看到执行步骤了.在学习和实践Playwright的过程中,偶然发现了使用Playw ...
- 力扣1132(MySQL)-报告的记录Ⅱ(中等)
题目: 编写一段 SQL 来查找:在被报告为垃圾广告的帖子中,被移除的帖子的每日平均占比,四舍五入到小数点后 2 位. Actions 表: Removals 表: Result 表: 2019-07 ...
- 第 10 章 使用pyecharts 进行数据展示
第 10 章 使用pyecharts 进行数据展示 10.1 安装 pyecharts pyecharts 是一个用于生成 Echarts 图表的类库, Echarts 是百度开源的一个数据可视化JS ...
- 科普达人丨一图看懂阿里云ECS
简介: 建议收藏 原文链接:https://click.aliyun.com/m/1000363154/ 本文为阿里云原创内容,未经允许不得转载.
- 直播回顾:准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术
简介: 你还在为分析机器负载高而苦恼?这款 ssar 工具独创 load5s 指标精准定位超硬核. 编者按:本文整理自龙蜥SIG技术周会,作者闻茂泉,阿里云计算平台事业部SRE运维专家,是龙蜥社区跟 ...