实现n皇后问题(回溯法)
/*========================================
功能:实现n皇后问题,这里实现4皇后问题
算法:回溯法
==========================================*/
#include <stdio.h>
#include <stdlib.h> #define TRUE 1
#define FALSE 0
#define NUM_QUEEN 4 /* 皇后个数 */ typedef int BOOL; void n_queen(int sol[], int n);
BOOL place(int solution[], int k);
void display(); int solution[NUM_QUEEN + ] = {}; /* 皇后问题的解向量 */ void main()
{
n_queen(solution, NUM_QUEEN);
display();
}
/*=================================
功能:找出满足n皇后问题的解向量
输入:皇后个数n
输出:n皇后的解向量sol[]
===================================*/
void n_queen(int sol[], int n)
{
int k = ; /* 从第一个皇后开始 */
sol[k] = ;
while(k > )
{
sol[k] = sol[k] + ;
while(sol[k] <= n && !place(sol, k)) /* 如果sol[k]列不满足条件 找下一列 */
sol[k] = sol[k] + ;
if(sol[k] <= n) /* 找到满足条件的列 */
{
if(k == n)
break; /* 最后一个皇后处理完 直接退出 */
else
k = k + ; /* 处理下一个皇后 */
}
else /* 判断完该行所有列 没有合适的位置 回溯 */
{
sol[k] = ;
k = k - ;
}
}
}
/*==========================================================
功能:判断第k个皇后的位置 是否正确 与前面k - 1个皇后比较
输入:前k - 1个解向量
输出:第k个位置是否正确
============================================================*/
BOOL place(int sol[], int k)
{
int i; for(i = ; i < k; i ++)
{
if(sol[i] == sol[k] || abs(sol[i] - sol[k]) == abs(i - k))
return FALSE;
} return TRUE;
}
/*===========================
功能:显示n皇后的解决向量
输入:无
输出:n皇后解决向量
=============================*/
void display()
{
int i = ;
printf("%d QUEES solution:", NUM_QUEEN);
for(; i <= NUM_QUEEN; i ++)
{
printf("%d\t", solution[i]);
}
printf("\n");
}

实现n皇后问题(回溯法)的更多相关文章
- 八皇后问题-回溯法(MATLAB)
原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...
- HDU 2553 n皇后问题(回溯法)
DFS Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description ...
- 算法入门经典-第七章 例题7-4-1 拓展 n皇后问题 回溯法
实际上回溯法有暴力破解的意思在里面,解决一个问题,一路走到底,路无法通,返回寻找另 一条路. 回溯法可以解决很多的问题,如:N皇后问题和迷宫问题. 一.概念 回溯算法实际类似枚举的搜索尝试过程,主 ...
- N皇后问题--回溯法
1.引子 中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每 ...
- noj算法 8皇后打印 回溯法
描述: 输出8皇后问题所有结果. 输入: 没有输入. 输出: 每个结果第一行是No n:的形式,n表示输出的是第几个结果:下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格.不同的结果中,先输出第 ...
- JAVA实现N皇后问题(回溯法)
package com.leetCode; /** * Follow up for N-Queens problem. Now, instead outputting board configurat ...
- N皇后问题 回溯法 C/C++
一:问题描述 N皇后问题(含八皇后问题的拓展,规则同四皇后):在N*N的棋盘上,放置N个皇后,要求每一横行每一列,每一对角线上均只能放置一个皇后,求解可能的方案及方案数. 二:代码及结果如下 #inc ...
- 8皇后-----回溯法C++编程练习
/* * 八皇后问题回溯法编程练习 * 在8×8的棋盘上,放置8个皇后,两个皇后之间不能两两攻击 * 也即,直线,垂直45度.135度方向不能出现两个皇后 * * copyright Michael ...
- 回溯法解决N皇后问题(以四皇后为例)
以4皇后为例,其他的N皇后问题以此类推.所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子.在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平.竖直.以及45度 ...
随机推荐
- React Editor 应用编辑器(1) - 拖拽功能剖析
这是可视化编辑器 Gaea-Editor 的第一篇连载分析文章,希望我能在有限的篇幅讲清楚制作这个网页编辑器的动机,以及可能带来的美好使用前景(画大饼).它会具有如下几个特征: 运行在网页 文档流布局 ...
- Android自定义标题TitleView
Android开发过程中,经常遇到一个项目需要重复的定义相同样式的标题栏,Android相继推出了actionBar, toolBar, 相信有用到的朋友也会遇到一些不如意的时候,比如标题栏居中时,需 ...
- IOS中如何显示带有html标签的富文本
NSString *strHTML = @"<p>你好</p><p> 这是一个例子,请显示</p><p>外加一个ta ...
- Python 基础【第十篇】内置类型
一.integral 类型 Python提供了两种integral类型,即int(整数)与bool(布尔值). 1.1.整数 整数的相关运算符.函数.数据类型转换 1.1.1.整数的运算符 前面已经讲 ...
- [java小笔记] 关于数组内存管理的理解
数组是大多数编程语言都提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组,java语言的数组变量时引用类型的变量,因此具有java引用变量的特性.在使用数组之前必须对数组对象 ...
- 【转】为 XmlNode.SelectNodes 加上排序功能
测试资料: <Config> <Item a='/> <Item a='/> <Item a='/> <Item a='/> <Ite ...
- mount命令详解
http://tutu.spaces.eepw.com.cn/articles/article/item/70737 挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount ...
- GlusterFS集群文件系统概述
http://blog.csdn.net/zonelan/article/details/8468383 1. GlusterFS概述 GlusterFS是Scale-Out存储解决方案Gl ...
- Android开发之Service
什么是Service? Android中的服务与Activity不同,他是不能与用户进行交互,自己也不能启动在后台运行的程序,当我们退出应用时,Service应用并没有结束,它仍然在后台运行. 例子: ...
- Python获取本机的mac,ip,name
Python获取mac 获取计算机名字和ip(内网ip) 指定网卡ip