八皇后代码C语言版本
y = x + b -> y-x = b 主对角线上,行下标与列下标之差相等
y = -x + b -> y+x = b 副对角线上,行下标与列下标之和相等
主对角线共有15条
副对角线共有15条
列有8条
每个皇后占位以后,相当于占用一条主对角线,一条副对角线和一条列
定义三个占位buf,分别为列,主对角线,副对角线。
b可以作为占位符下标索引
副对角线的b可能是负值
#include <stdio.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h> typedef struct{
int m_s32Count;
unsigned char m_u8ColBuf[8];
unsigned char m_u8MainDiagonalBuf[15];
unsigned char m_u8SubDiagonalBuf[15];
unsigned char m_u8QueenBuf[8][8];
}StQueenInfo; void PrintQueen(const StQueenInfo *p_stQueenInfo)
{
int i,j;
for(i = 0; i < 8; i++)
{
for(j = 0; j < 8; j++)
{
if(p_stQueenInfo->m_u8QueenBuf[i][j] == 1)
{
printf("X ");
}
else
{
printf("- ");
}
}
printf("\n");
}
printf("\n");
} void FindQueen(int p_s32RowIdx, StQueenInfo *p_stQueenInfo)
{
int j; if(p_s32RowIdx > 7)
{//前8行满足,第九行结束
p_stQueenInfo->m_s32Count++;
printf("%d\n", p_stQueenInfo->m_s32Count);
PrintQueen(p_stQueenInfo);
return;
}
for(j = 0; j < 8; j++)
{
if(p_stQueenInfo->m_u8ColBuf[j] != 1
&& p_stQueenInfo->m_u8MainDiagonalBuf[p_s32RowIdx+j] != 1
&& p_stQueenInfo->m_u8SubDiagonalBuf[0-p_s32RowIdx+j +7] != 1)
{
p_stQueenInfo->m_u8ColBuf[j] = 1;
p_stQueenInfo->m_u8MainDiagonalBuf[p_s32RowIdx+j] = 1;
p_stQueenInfo->m_u8SubDiagonalBuf[0-p_s32RowIdx+j +7] = 1;
p_stQueenInfo->m_u8QueenBuf[p_s32RowIdx][j] = 1;
FindQueen(p_s32RowIdx+1, p_stQueenInfo);
p_stQueenInfo->m_u8ColBuf[j] = 0;
p_stQueenInfo->m_u8MainDiagonalBuf[p_s32RowIdx+j] = 0;
p_stQueenInfo->m_u8SubDiagonalBuf[0-p_s32RowIdx+j +7] = 0;
p_stQueenInfo->m_u8QueenBuf[p_s32RowIdx][j] = 0;
}
}
} int main()
{
StQueenInfo l_stQueenInfo={};
FindQueen(0, &l_stQueenInfo); return 0;
}
八皇后代码C语言版本的更多相关文章
- 八皇后问题C语言解法
偶遇八皇后问题,随即自己写了一个仅供参考 #include<stdio.h> #include<math.h> #define SIZE 8 void Circumsribe( ...
- 八皇后,回溯与递归(Python实现)
八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...
- 八皇后算法的另一种实现(c#版本)
八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...
- 回溯算法-C#语言解决八皇后问题的写法与优化
结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...
- 使用java语言实现八皇后问题
八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...
- 题目---汉诺塔及AI代码及八皇后
2019春第十一周作业 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering ...
- R语言-八皇后问题
老师给我出了个暑期作业:用R语言解决八皇后问题. 八皇后问题:国际象棋棋盘(8×8)上放8个“后”,使8个“后”之间互相不能被进攻.(即:每个“后”所在行.列.两条斜线都没有其它子) 查看网上,大多用 ...
- C语言解决八皇后问题
#include <stdio.h> #include <stdlib.h> /* this code is used to cope with the problem of ...
- 比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题
两队比赛,甲队为A.B.C3人,乙队为X.Y.Z3人.已知A不和X比,C不和X.Z比,请编程序找出3队赛手名单 采用了与八皇后问题相似的解法,代码如下: 如有疑问请链接八皇后问题的解法:http:// ...
随机推荐
- Ansible Playbook概览
Ansible playbook 执行需要三步路执行: 1.编写playbook 2.定义主机清单文件 3.设置运行环境,写入配置文件 1.编写playbook Playbook使用YAML语法格式进 ...
- 项目: ATM+购物车
ATM+购物车 项目文件: 介绍 以下为文件夹层次和内容: readme.md 1. 需求 模拟银行取款 + 购物全过程 1.注册 2.登录 3.提现 4.还款 5.转账 6.查看余额 7.查看购物车 ...
- .NET ORM框架HiSql实战-第三章-使用自定义编号生成【申请编号】
一.引言 上一篇.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查) 中菜单编号采用的是雪花ID,生成的编号无法自定义.比如本系统的一个申请业务,需要按前缀+日期+流水号 ...
- CF1132D Stressful Training
题目链接 题目 见链接. 题解 方法一 知识点:贪心,优先队列,二分. 显然,这道题可以用二分答案做.check 函数可以用小根堆,让维持时间最小的先充电. 但是不优化这道题会炸.有两个关键优化:一个 ...
- C++类对象作为类成员
//当其他类的对象作为本类的成员 构造的时候先去构造类的对象 再去构造自身 //析构函数: 先进后出 先去构造Phone 再去构造Person Person先退出 Phone后退出 //析构与构造顺序 ...
- 第2章 开始学习C++
说明 看<C++ Primer Plus>时整理的学习笔记,部分内容完全摘抄自<C++ Primer Plus>(第6版)中文版,Stephen Prata 著,张海龙 袁国忠 ...
- jdbc 04: 配置连接信息
jdbc连接mysql,将需要的信息配置到文件中 package com.examples.jdbc.o4_配置连接信息; import java.sql.Connection; import jav ...
- 作业一、安装Ubuntu系统
Ubuntu1804安装 一.安装环境 1.VMware Workstation 16 Pro 2.Ubuntu 18.04.6 LTS 二.部署系统 步骤1.进入VMware,点击创建新的虚拟机 步 ...
- 基于MIndSpore框架的道路场景语义分割方法研究
基于MIndSpore框架的道路场景语义分割方法研究 概述 本文以华为最新国产深度学习框架Mindspore为基础,将城市道路下的实况图片解析作为任务背景,以复杂城市道路进行高精度的语义分割为任务目标 ...
- linux docker .net core 从建立网站到预览
docker的安装在网上一搜一大把,windows安装的就是exe双击,linux安装需要执行语句 ps:需要准备xftp.xshell.vs 2019.linux服务器.docker账号密码 例如: ...