C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法

本文提供了一种使用C语言解决八皇后问题的方法,通过递归算法实现了皇后的位置摆放,确保任意两个皇后不在同一行、列或斜线上。

偶遇八皇后问题,随即自己写了一个仅供参考

#include

#include

#define SIZE 8

void Circumsribe(int(*checkerboard)[SIZE], int x, int y, int flag);

int EightQueen(int(*checkerboard)[SIZE], int num, int begin_x, int begin_y);

void main()

{

int checkerboard[SIZE][SIZE] = {}, result;

result = EightQueen(checkerboard, , , );

printf_s("%d\n", result);

}

//划定或解除皇后攻击范围

void Circumsribe(int(*checkerboard)[SIZE], int x, int y, int flag)

{

int i, j;

for (i = ; i < SIZE; i++)

{

for (j = ; j < SIZE; j++)

{

if (flag == )

{

//flag为1表示放置皇后,划定攻击范围

checkerboard[i][j] = (i == x || j == y || abs(j - y) == abs(i - x)) ? checkerboard[i][j] + : checkerboard[i][j];

}

else

{

//flag为0表示移走皇后,解除攻击范围

checkerboard[i][j] = (i == x || j == y || abs(j - y) == abs(i - x)) ? checkerboard[i][j] - : checkerboard[i][j];

}

}

}

}

//num表示放置皇后的序号,begin_x与begin_y表示此序号皇后放置的坐标

//返回值表示余下num个皇后有多少种允许的摆法

int EightQueen(int(*checkerboard)[SIZE], int num, int begin_x, int begin_y)

{

int x, y, sum = ; //sum理解为皇后在不同位置上允许的摆法总和

if (num <= || num > SIZE || begin_x < || begin_y < || begin_x > SIZE || begin_y > SIZE)

{

//数据非法则返回0

return ;

}

else if (num == )

{

//若只有1个皇后,则从指定的(begin_x,begin_y)开始,往后统计摆法

for (x = begin_x; x < SIZE; x++)

{

for (y = (x == begin_x ? begin_y : ); y < SIZE; y++)

{

sum = checkerboard[x][y] == ? sum + : sum;

}

}

return sum;

}

else

{

//若多于1个皇后,则先将多余的皇后从指定的(begin_x,begin_y)开始摆好,在此基础上,统计最后1个皇后的摆法

//引入(begin_x,begin_y)是为了避免重复放置,每个皇后的位置都应该从上个皇后的位置处开始,否则有重复

for (x = begin_x; x < SIZE; x++)

{

for (y = (x == begin_x ? begin_y : ); y < SIZE; y++)

{

if (checkerboard[x][y] == )

{

Circumsribe(checkerboard, x, y, ); //若此(x,y)处可放置皇后,则划定这个皇后的攻击范围

sum = sum + EightQueen(checkerboard, num - , x, y); //在此基础上确定余下皇后的摆法

Circumsribe(checkerboard, x, y, ); //将此皇后移到下个位置前需要先解除其攻击范围

}

}

}

return sum;

}

}

C&num;中八皇后问题的递归解法——N皇后

百度测试部2015年10月份的面试题之——八皇后. 八皇后问题的介绍在此.以下是用递归思想实现八皇后-N皇后. 代码如下: using System;using System.Collections. ...

八皇后问题 -- python面向对象解法

# [8*8棋盘八皇后问题] class Queen: def __init__(self, row, col): self.row = row self.col = col self.pos = ( ...

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

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

回溯算法-C&num;语言解决八皇后问题的写法与优化

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

java递归求八皇后问题解法

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

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

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

R语言-八皇后问题

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

C语言解决八皇后问题

#include #include /* this code is used to cope with the problem of ...

八皇后问题 --- 递归解法 --- java代码

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上.八皇后 ...

随机推荐

OSI模型

1.物理层 •设备间接收或发送比特流 •说明电压.线速和线缆等 例子: EIA/TIA-232 V.35 2. 数据链路层 •将比特组合成字节进而组合成帧 •用MAC地址访问介质 •错误发现但不能纠正 ...

NET中MSMQ的使用----附例子

目录 一:MSMQ的一些理论上的知识 二:队列类型(Queue Type) 三:安装消息队列 四:在C#中Messagequeue class 五:MSMQ-发送消息到远程专用队列 六:例子   一. ...

二、Hadoop学习笔记————架构学习

1.成百上千台服务器组成集群,需要时刻检测服务器是否故障 2.用流读取数据更加高效快速 3.存储节点具有运算功能,省略了服务器之间来回传数据的网络带宽限制 4.一次写入,多次访问,不修改数据 5.多平 ...

微信小程序中的组件使用2

需求    上面两个页面是同一个小程序的不同页面,两个页面中都是用到了label,有相似的地方,但是也有不同之处,这个时候,如果我们想要将这些label做出组件,然后复用,有该怎么做呢? 基础组件 首 ...

自己开发能在asp&period;net项目正常使用的定时器WebTimer,让定时器听话起来

简述: iis是一个很不错的服务器,有很多很好用的特性来支持网站运行,但有时候这些特性却会影响到我们开发者的一些操作.比如我们需要定时运行做一些操作,但由于iis的利用应用程序池来管理这种方式会让网站 ...

机器学习评价方法 - Recall &amp&semi; Precision

刚开始看这方面论文的时候对于各种评价方法特别困惑,还总是记混,不完全统计下,备忘. 关于召回率和精确率,假设二分类问题,正样本为x,负样本为o: 准确率存在的问题是当正负样本数量不均衡的时候: 精心设 ...

response&period;encodeURL的用法

Java Servlet API 中引用 Session 机制来追踪客户的状态.Servlet API 中定义了 javax.servlet.http.HttpSession 接口,Servlet 容 ...

js实现放大镜的效果

leetcode&lowbar;11&period; Container With Most Water

leetcode_11. Container With Most Water 一,问题: Given n non-negative integers a1, a2, ..., an, where ea ...

linux 下的mysql 连接报错

报错: Fri Jul 28 16:28:52 CST 2017 WARN: Establishing SSL connection without server’s identity verific ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值