CSP-S/J 信息学1213:八皇后问题-信息学一本通C++,C语言代码

y = x + b   ->    y-x = b   主对角线上,行下标与列下标之差相等
y = -x + b  ->    y+x = b   副对角线上,行下标与列下标之和相等
主对角线共有15条
副对角线共有15条
列有8条
每个皇后占位以后,相当于占用一条主对角线,一条副对角线和一条列
定义三个占位buf,分别为列,主对角线,副对角线。
b可以作为占位符下标索引
副对角线的b可能是负值,需要加一个偏移将索引范围变为0-14
 

#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 ");
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值