实现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度 ...
随机推荐
- Spring3之MVC
模式-视图-控制器(MVC)是UI设计中常见的设计模式, 该模式区分应用程序中的模式.视图和控制器三个角色,消除了业务逻辑与UI的耦合.模式负责封装视图展示的应用数据.视图应该只显示数据,不包含任何业 ...
- Android 自定义View修炼-Android中常见的热门标签的流式布局的实现
一.概述:在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何 自定义一个类似热门标签那样的流式布局吧(源码下载在下面最后给出哈) 类似的 ...
- Java基础知识强化之多线程笔记03:进程与线程 和 多线程的意义
1. 要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在. 2. 什么是进程? 通过任务管理器我们就看到了进程的存在. 而通过观察,我们发现只有运行的程序才会出 ...
- js中数组内置方法
var arr = ['A','B','C','D']; length 计算数组的长度 arr.length//4 indexOf() 搜索一个指定的元素的位置 arr.indexOf('C');// ...
- 业界最有价值的 ASP.NET 博文汇总
ASP.NET凭借它丰富的控件,强大的适应性及良好的封装性,成为业界开发的一门巨匠,它大大缩短了网站开发的时间,降低开发成本.并且可以运行在Web应用软件开发者的全部平台上.本电子书汇集了业界最有价值 ...
- 关于SpringMVC和Struts2的区别
1. 与struts2不同 1. springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器. 2. springmvc是基于方法开发,传递参数是通 ...
- easyUI 比较时间大小
// function toDate(str){ // var sd=str.split("-" ...
- WebClient外部请求乱码
WebClient web = new WebClient();//创建webclient对象 web.Encoding = Encoding.UTF8;//定义对象语言 var result = w ...
- java 反射机制探究
一 反射机制操作类的成员变量 二 操作类的方法 三 利用反射实例化类 四 利用反射访问一个类的私有成员 五 利用反射覆盖数据对象的toString 方法
- NPOI操作EXCEL 类代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NPOI.SS. ...