/*
* =====================================================================================
*
* Filename: queen.c
*
* Description:
*
* Version: 1.0
* Created: 2011年12月10日 12时22分09秒
* Revision: none
* Compiler: gcc
*
* Author: YOUR NAME (),
* Company:
*
* =====================================================================================
*/
#include <stdlib.h>
#include <stdio.h>
#define N 8
int cnt = 0;
void print_matrix(int a[][N])
{
int i, j;
printf("Case %d:\n", cnt);
for (i = 0; i < N; i++)
{
for (j = 0 ; j < N; j++)
{
printf("%d", a[i][j]);
}
printf("\n");
}
}
void init(int a[][N])
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0 ; j < N; j++)
{
a[i][j]=0;
}
}
}
int judge(int a[][N], int x, int y)//按列递归,列不会有重复皇后,x,y的右上右下对角线也是不会有皇后的
//如果按行递归,则行不会有重复皇后,x,y的左上右上对角线是不会有皇后的
{
int i = 0;
for (i = 0; i < y; i++)
{
if (1 == a[x][i])//行重复
{
return 0;
}
}
for (i = 0; i <= x && i <= y; i++)//左上对角线
{
if (1 == a[x-i][y-i])
{
return 0;
}
}
for (i = 0; i <= y && i+x < N; i++)//左下对角线
{
if (1 == a[x+i][y-i])
{
return 0;
}
}
return 1;
}
int queen(int a[][N], int y)
{
int i = 0;
if(y == 8)
{
cnt++;
print_matrix(a);
return 0;
}
for (i = 0; i < N; i++)
{
if ( judge(a, i, y))
{
a[i][y] = 1;
queen(a, y+1);
a[i][y] = 0;
}
}
}
int main()
{
int a[N][N] = {0};
init(a);
queen(a, 0);
return EXIT_SUCCESS;
}
- 浏览: 124664 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (341)
- Java (18)
- J2EE (0)
- Linux (81)
- VIM (22)
- windows (6)
- DB (11)
- Algorithm (57)
- Data structure (17)
- JS (5)
- C++ (65)
- HTML (6)
- Cloud (4)
- Eclipse (7)
- Python (42)
- Play (3)
- HTTP (1)
- awk (7)
- shell (20)
- Regular expression (5)
- NLP (33)
- ML (38)
- DM (43)
- Probabilistic (6)
- Crawler (14)
- matlab (1)
- perl (4)
- Design pattern (1)
- IO[File] (2)
- Deep Learning (1)
发表评论
-
正向插入排序
2011-09-28 21:51 310/* * ========================== ... -
归并排序
2011-10-07 23:22 245/* *========================= ... -
二叉排序树
2011-10-31 15:46 241#include <stdio.h> #inclu ... -
动态栈
2011-10-31 15:47 299/* * ========================== ... -
struct in_addr
2011-11-03 17:29 303struct in_addr addr_ip; struct ... -
UNIX创建临时文件
2011-11-04 13:26 287/* * ========================= ... -
UNIX目录扫描
2011-11-04 17:09 306/* * ========================== ... -
迷宫(多出口)
2011-12-10 12:09 299/* * ========================== ... -
epoll(精髓)
2011-12-23 09:47 244epoll - I/O event notification ... -
Linux Epoll介绍和程序实例
2011-12-23 09:47 2461. Epoll是何方神圣? Epoll可是当前在Linu ... -
Beli Makfile for linux
2012-04-25 13:12 322.SUFFIXES: .c .u CC= gcc # CFLA ... -
gsl eclipse
2012-04-25 14:27 4641 我的gsl安装路径:D:/GnuWin32 1 ... -
动态规划
2012-06-15 13:39 298前言 和分治法一样,动态规划(dynamic progra ... -
01背包图解
2012-06-15 17:06 32101背包问题描述:一个 ... -
动态规划 最短路径
2012-06-18 22:35 449动态规划求有向无环图的最短路径 问题描述如下 ... -
Linux下获取毫秒级时间差
2012-08-22 19:46 522Linux下获取毫秒级时间差 使用Linux的ge ... -
CPU Sin
2012-08-22 21:12 3201 #include <iostream> ... -
正文提取
2012-10-25 11:36 375目前互联网上公布出来的正文提取算法,大家可以综合比较下,一起 ... -
C++ 补全插件
2012-10-30 20:16 294config vim + clang complete wi ... -
c++ clang_complete
2012-12-17 17:01 305前一段时间发现了clang complete,发现效果 ...
相关推荐
n皇后问题问题递归算法 n皇后问题问题递归算法 #include #include #define m 4 int x[m]={0}; bool place(int k,int j)//判断第K个皇后能否放在第X[K]列上 { int i; for(i=1;i;i++) { if((x[i]==j)||abs(x[i]-j)...
给定n×n的棋盘(假定n=4),用递归算法求出n个皇后全部的放置方法。每个皇后的位置用(k, x(k))表示,k表示行号,x(k)表示列号。为方便起见,输出结果的行号和列号都从1开始。将计算出的n个皇后的全部放置方法分行...
在一个8×8的棋盘里放置8个皇后,要求每个皇后两两之间不相"冲"(在每一横列竖列斜列只有一个皇后)。 〖问题分析〗(聿怀中学吕思博) 这道题可以用递归循环来做,分别一一测试每一种摆法,直到得出正确的答案。主要...
帮朋友做的顺便传上来分享,要求:输入一个皇后的位置后输出所有可能的所有符合要求的棋局,即任意两个皇后都不同行或同列或同对角线。用数组+递归回朔实现
i++) //依次按列输出每种解法 { cout[i]; } } void EightQueen (int row) { int col; for (col = 0; col < 8; col++) { A[row] = col; //代表第row行的第col列放皇后 if (Correct (row, col)) //判断在...
规定每行只能摆一个皇后,从第一行开始,对列,对角线进行判断,依次类推,有满足要求的则放置皇后,并标记危险区,否则回溯到上一步
很具有参考意义,知道学习的同志们下载。 在4×4方格的棋盘内,放置四个皇后,使得任意两个皇后不在同一行、同一列、同一条对角线上。请找出所有的摆法。
该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在...
八皇后问题:在8*8的国际象棋盘上放置8个皇后,使其不能互相攻击(即任意两个皇后不能在同一行、同一列、同一斜线上)。试用递归法求出所有符合条件的布局。
在8×8的国际象棋棋盘上放置8个皇后,要求任意两个皇后不能在同一行、同一列或同一条对角线上。要求用递归和非递归算法实现。打印所有可能情况。
该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 该程序是用C语言编写的用于解决经典的...
在8*8的棋盘上放置8个皇后,要求同一列只能有一个,同一行只能有一个,正斜线,反下线上只能有一个
八皇后问题要求在一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击.按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子....
8皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。递归,JAVA语言
8皇后的c++实现,采用递归方法实现,控制台输出皇后所在位置,0为空格,1为皇后,列出所有可能的情形。
该问题是在8×8格的国际象棋棋盘上摆放8个皇后,要求没有一个皇后能够吃掉任何其他一个,也就是使其不能互相攻击,即没有两个或两个以上的皇后都不能处于同一行、同一列或同一对角线上,问有多少种摆法,这是做出这...
用排列树实现8皇后问题 算法主要思路 约束条件: ①不同列:x[i]!=x[k] ②不在各对角线上:abs(i-k)!=abs(x[i]-x[k]) 无限界条件 采用排列树可以去掉条件x[i]!=x[k],因为排列树结构每层结点的孩子数减1,已经...
在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 扩展到N皇后问题是一样的。一看,似乎要用到二维数组。其实不需要。一维数组就能判断...
该问题是德国著名数学家高斯于1850年提出的:在8行8列的国际象棋棋盘上摆放着八个皇后。若两个皇后位于同一行、同一列或同一对角线上,则称它们为互相攻击。在国际象棋中皇后是最强大的棋子,因为它的攻击范围最大。...
他的问题是:在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。请设计算法打印所有可能的摆放方法。 提示: 1、可以使用递归或非递归两种方法实现 2、实现...