八皇后问题C语言解法
偶遇八皇后问题,随即自己写了一个仅供参考
#include<stdio.h>
#include<math.h>
#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语言解法的更多相关文章
- C#中八皇后问题的递归解法——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 = ( ...
- 八皇后代码C语言版本
y = x + b -> y-x = b 主对角线上,行下标与列下标之差相等y = -x + b -> y+x = b 副对角线上,行下标与列下标之和相等主对角线 ...
- 比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题
两队比赛,甲队为A.B.C3人,乙队为X.Y.Z3人.已知A不和X比,C不和X.Z比,请编程序找出3队赛手名单 采用了与八皇后问题相似的解法,代码如下: 如有疑问请链接八皇后问题的解法:http:// ...
- 回溯算法-C#语言解决八皇后问题的写法与优化
结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...
- java递归求八皇后问题解法
八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...
- 使用java语言实现八皇后问题
八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...
- R语言-八皇后问题
老师给我出了个暑期作业:用R语言解决八皇后问题. 八皇后问题:国际象棋棋盘(8×8)上放8个“后”,使8个“后”之间互相不能被进攻.(即:每个“后”所在行.列.两条斜线都没有其它子) 查看网上,大多用 ...
- C语言解决八皇后问题
#include <stdio.h> #include <stdlib.h> /* this code is used to cope with the problem of ...
随机推荐
- 在Docker中安装配置Oracle11g并实现数据持久化
1.拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 镜像详情:https://dev.aliyun.com/ ...
- 第9章 应用层(5)_文件传输协议FTP
6. 文件传输协议FTP 6.1 FTP主动和被动模式 (1)FTP协议 ①与其他协议不同,FTP协议在客户端访问FTP服务器时需要建立两个TCP连接.一个用来传输FTP命令,一个用来传输数据. ②在 ...
- Devlopment Env Setup install ubuntu16.04
http://blog.csdn.net/ljheee/article/details/52966048 1.add chinese language support settings -> i ...
- Android--普通注册页面实现(无功能)
reg.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...
- Android手动控制软键盘的开启和关闭,判断软键盘是否显示;
工具类,拿走就能用: import android.annotation.TargetApi; import android.app.Activity; import android.content. ...
- 【死磕 Spring】—— IoC 之加载 BeanDefinition
本文主要基于 Spring 5.0.6.RELEASE 摘要: 原创出处 http://cmsblogs.com/?p=2658 「小明哥」,谢谢! 作为「小明哥」的忠实读者,「老艿艿」略作修改,记录 ...
- 【Selenium-WebDriver自学】Selenium测试设计技术(十三)
Selenium页面对象模型 1.Selenium页面对象模型 优点 页面的对象模型是其中测试对象和功能被彼此分开,从而保持代码干净的实现. 对象保持独立的测试脚本.一个目的可以通过一个或多个测试脚本 ...
- oracle的schema的含义
转自:http://www.cnblogs.com/sfmjp/articles/2932748.html 在现在做的Kraft Catalyst 项目中,Cransoft其中有一个功能就是schem ...
- web session 原理1
原理 我们都知道,浏览器无状态的.浏览器是操作不了session的,浏览器能够做的只是传递cookie,每次都传递. 把当前主机下的,和当前请求相同域下的cookie 传递到服务器去,只要cooki ...
- Hessian 源码简单分析
Hessian 是一个rpc框架, 我们需要先写一个服务端, 然后在客户端远程的调用它即可. 服务端: 服务端通常和spring 做集成. 首先写一个接口: public interface Hell ...