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语言版本的更多相关文章

  1. 八皇后问题C语言解法

    偶遇八皇后问题,随即自己写了一个仅供参考 #include<stdio.h> #include<math.h> #define SIZE 8 void Circumsribe( ...

  2. 八皇后,回溯与递归(Python实现)

    八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...

  3. 八皇后算法的另一种实现(c#版本)

    八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...

  4. 回溯算法-C#语言解决八皇后问题的写法与优化

    结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...

  5. 使用java语言实现八皇后问题

    八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...

  6. 题目---汉诺塔及AI代码及八皇后

    2019春第十一周作业 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering ...

  7. R语言-八皇后问题

    老师给我出了个暑期作业:用R语言解决八皇后问题. 八皇后问题:国际象棋棋盘(8×8)上放8个“后”,使8个“后”之间互相不能被进攻.(即:每个“后”所在行.列.两条斜线都没有其它子) 查看网上,大多用 ...

  8. C语言解决八皇后问题

    #include <stdio.h> #include <stdlib.h> /* this code is used to cope with the problem of ...

  9. 比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题

    两队比赛,甲队为A.B.C3人,乙队为X.Y.Z3人.已知A不和X比,C不和X.Z比,请编程序找出3队赛手名单 采用了与八皇后问题相似的解法,代码如下: 如有疑问请链接八皇后问题的解法:http:// ...

随机推荐

  1. 理解 Python 的 for 循环

    在本篇博客中,我们将讨论 Python 中 for 循环的原理. 我们将从一组基本例子和它的语法开始,还将讨论与 for 循环关联的 else 代码块的用处. 然后我们将介绍迭代对象.迭代器和迭代器协 ...

  2. Windows 启动过程

    引言 启动过程是我们了解操作系统的第一个环节.了解 Windows 的启动过程,可以帮助我们解决一些启动的问题,也能帮助我们了解 Windows 的整体结构. 以下内容将分为[加载内核].[内核初始化 ...

  3. Java:如何打印整个字符串数组?

    例: public static void main(String[] args) { String prodName = "雇员姓名,雇员唯一号"; String[] prodN ...

  4. VScode运行总是显示running状态

    一.每次点击运行都显示code is already running,而且键盘也没有办法输入 二.解决办法 注意:记得重新启动VScode

  5. 阿里云有奖体验:用PolarDB-X搭建一个高可用系统

    体验简介 场景将提供一台配置了CentOS 8.5操作系统和安装部署PolarDB-X集群的ECS实例(云服务器).通过本教程的操作,带您体验如何使用PolarDB-X搭建一个高可用系统,通过直接ki ...

  6. VxWorks环境搭建与学习

    搭建环境所需的所有资源: https://pan.baidu.com/s/1sUF2I_DBHs-86IUJ4Ykn2Q 提取码: t7sj 实时系统vxWorks - Shell命令 https:/ ...

  7. 一张图进阶 RocketMQ - 消息存储

    前言 三此君看了好几本书,看了很多遍源码整理的 一张图进阶 RocketMQ 图片,关于 RocketMQ 你只需要记住这张图!觉得不错的话,记得点赞关注哦. [重要]视频在 B 站同步更新,欢迎围观 ...

  8. java的访问权限protected和default

    protected和default的区别 第一点:在同一个包中,protected和default表现一致,即,当main方法所在的类和使用了protected与default修饰属性.方法的类在同一 ...

  9. Vxe-table 高亮当前行

    需求 1 :设置初始高亮 子组件: 父组件 需求 2 :高亮行的变化,需要把数据传递到兄弟组件中 解决办法:EventBus 参考链接: http://t.csdn.cn/iwOJc main.js ...

  10. ASP.NET Core 产生连续 Guid

    1 前言 1.1 这篇文章面向的读者 本文不会过多解释 Guid 是什么,以及顺序 Guid 的作用,需要读者自行具备: 知道 Guid,并且清楚其作用与优势 清楚 Guid.NetGuid() 产生 ...