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;
}

最新文章

  1. CSS3 Loading(加载)动画效果
  2. Python标准模块--linecache
  3. js中的forEach
  4. Oracle存储过程写法
  5. (转)颜色渐变CSS
  6. Unity3d:延迟加载ScrollView的内容
  7. js取单选按钮,复选按钮的值
  8. Spring与SpringMVC的容器关系分析
  9. HTML&amp;JS笔记(1)
  10. zoj 3822 Domination(2014牡丹江区域赛D称号)
  11. 同一台电脑使用 gitlab 和 github 配置
  12. ISLR系列:(2)分类 Logistic Regression &amp; LDA &amp; QDA &amp; KNN
  13. 再谈HTTP2性能提升之背后原理—HTTP2历史解剖
  14. VM虚拟机ubantu自适应屏幕大小
  15. docker学习笔记二
  16. Angular4 —— NgModule
  17. [LeetCode] 130. Surrounded Regions_Medium tag: DFS/BFS
  18. [DIOCP3-IocpTask说明书]基于IOCP引擎的多线程任务的投递和回调处理单元
  19. 使用ABP框架踩过的坑系列3
  20. 20155304 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计

热门文章

  1. FTP安装及使用
  2. 《SVDNet for Pedestrian Retrieval》理解
  3. Tapdata Cloud 2.1.4 来啦:数据连接又上新,PolarDB MySQL、轻流开始接入,可自动标记不支持的字段类型
  4. Thread类的常用方法_获取线程名称的方法和设置线程名称的方法
  5. ClickHouse(04)如何搭建ClickHouse集群
  6. APISpace 让你快速获取名言警句
  7. Template -「网络流 &amp; 二分图」
  8. 同时安装py2和py3-安装多版本python
  9. linux 安装 apache+mysql+php
  10. 小白之Python基础(四)