八皇后代码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:// ...
随机推荐
- Python:socket编程教程
ocket是基于C/S架构的,也就是说进行socket网络编程,通常需要编写两个py文件,一个服务端,一个客户端. 首先,导入Python中的socket模块: import socket Pytho ...
- labview从入门到出家3--制作和调用子VI
当程序越写越大的时候,我们会发现代码界面会比较乱(线太多),那要怎么做可以让代码更简洁一点,我只管直接调用某个功能函数,而不需要在一个VI上面去实现这个功能函数呢?--子VI.好比C语言里面的Main ...
- 本机通过IP地址连接Ubuntu18.04+ on Vmware
一.Vmware-顶部菜单栏-编辑-虚拟网络编辑器: 点一下 添加一个NAT模式的网络:要记住名称,比如这里我的是VMnet8 子网ip可以自己写,建议全程就都按我这个写,后续方便校对. 点一下 NA ...
- 6 zookeeper实现分布式锁
zookeeper实现分布式锁 仓库地址:https://gitee.com/J_look/ssm-zookeeper/blob/master/README.md 锁:我们在多线程中接触过,作用就是让 ...
- 记一次删除k8s namespace无法删除的问题
在用longhorn工具做k8s存储卷动态预配的时候,需要修改longhorn.yaml的一个默认参数,修改完成需要重新加载longhorn.yaml,结果重新加载出错了,修改的参数没有生效,于是执行 ...
- python自带gui插件tkinter使用小结
1.tkinter简介 Tkinter(即 tk interface,简称"Tk")本质上是对 Tcl/Tk 软件包的 Python 接口封装,它是 Python 官方推荐的 GU ...
- 手动注入bean到spring容器
ApplicationContext applicationContext = SpringContextUtils.getApplicationContext(); //将applicationCo ...
- Java---注解与反射
前言 近期在学习SSM框架的过程中发现在SSM框架中大量用到了反射与注解的知识,要想学好SSM框架,必须将注解与反射熟记于心,尤其是对Java反射机制的理解. 对于我这种记性不好的人来说"基 ...
- mysql开发实战8问
mysql读写性能是多少,有哪些性能相关的配置参数? Mysql负载高时,如何找到是由哪些SQL引起的? 如何针对具体的SQL做优化? SQL层面已难以优化,请求量继续增大时的应对策略? Mysql如 ...
- YII缓存操作
//文件依赖 $dependency = new \yii\caching\FileDependency(['filename'=>'hw.txt'])}; $cache->add(&qu ...