`

8皇后(按列递归)

 
阅读更多

/*
* =====================================================================================
*
* 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;
}

分享到:
评论

相关推荐

    n皇后问题问题递归算法

    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个皇后的全部放置方法分行...

    八皇后 递归实现 c++ 算法

    在一个8×8的棋盘里放置8个皇后,要求每个皇后两两之间不相"冲"(在每一横列竖列斜列只有一个皇后)。 〖问题分析〗(聿怀中学吕思博) 这道题可以用递归循环来做,分别一一测试每一种摆法,直到得出正确的答案。主要...

    八皇后问题递归求解C语言版

    帮朋友做的顺便传上来分享,要求:输入一个皇后的位置后输出所有可能的所有符合要求的棋局,即任意两个皇后都不同行或同列或同对角线。用数组+递归回朔实现

    递归法实现八皇后问题

    i++) //依次按列输出每种解法 { cout[i]; } } void EightQueen (int row) { int col; for (col = 0; col &lt; 8; col++) { A[row] = col; //代表第row行的第col列放皇后 if (Correct (row, col)) //判断在...

    八皇后问题 递归 回溯

    规定每行只能摆一个皇后,从第一行开始,对列,对角线进行判断,依次类推,有满足要求的则放置皇后,并标记危险区,否则回溯到上一步

    四皇后例题的递归调用使用方法,值得一试

    很具有参考意义,知道学习的同志们下载。 在4×4方格的棋盘内,放置四个皇后,使得任意两个皇后不在同一行、同一列、同一条对角线上。请找出所有的摆法。

    C++八皇后问题代码,递归实现

    该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在...

    八皇后问题,试用递归法求出所有符合条件的布局。

    八皇后问题:在8*8的国际象棋盘上放置8个皇后,使其不能互相攻击(即任意两个皇后不能在同一行、同一列、同一斜线上)。试用递归法求出所有符合条件的布局。

    在8×8的国际象棋棋盘上放置8个皇后,要求任意两个皇后不能在同一行、同一列或同一条对角线上。要求用递归和非递归算法实现。打印所有可能情况。

    在8×8的国际象棋棋盘上放置8个皇后,要求任意两个皇后不能在同一行、同一列或同一条对角线上。要求用递归和非递归算法实现。打印所有可能情况。

    经典八皇后问题 递归

    该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 该程序是用C语言编写的用于解决经典的...

    八皇后问题(递归算法)

    在8*8的棋盘上放置8个皇后,要求同一列只能有一个,同一行只能有一个,正斜线,反下线上只能有一个

    八皇后合集

    八皇后问题要求在一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击.按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子....

    8皇后算法问题_Java8_java_8皇后算法问题_

    8皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。递归,JAVA语言

    8皇后问题,可扩展到n皇后

    8皇后的c++实现,采用递归方法实现,控制台输出皇后所在位置,0为空格,1为皇后,列出所有可能的情形。

    数据结构 课程设计 八皇后问题(C语言源程序 + Word版课程设计说明书)

    该问题是在8×8格的国际象棋棋盘上摆放8个皇后,要求没有一个皇后能够吃掉任何其他一个,也就是使其不能互相攻击,即没有两个或两个以上的皇后都不能处于同一行、同一列或同一对角线上,问有多少种摆法,这是做出这...

    n皇后排列树

    用排列树实现8皇后问题 算法主要思路 约束条件: ①不同列:x[i]!=x[k] ②不在各对角线上:abs(i-k)!=abs(x[i]-x[k]) 无限界条件 采用排列树可以去掉条件x[i]!=x[k],因为排列树结构每层结点的孩子数减1,已经...

    c++递归实现n皇后问题代码(八皇后问题)

    在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 扩展到N皇后问题是一样的。一看,似乎要用到二维数组。其实不需要。一维数组就能判断...

    VS2017 C++解决八皇后问题(源代码)

    该问题是德国著名数学家高斯于1850年提出的:在8行8列的国际象棋棋盘上摆放着八个皇后。若两个皇后位于同一行、同一列或同一对角线上,则称它们为互相攻击。在国际象棋中皇后是最强大的棋子,因为它的攻击范围最大。...

    bahuanghou.zip_栈八皇后

    他的问题是:在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。请设计算法打印所有可能的摆放方法。  提示:  1、可以使用递归或非递归两种方法实现  2、实现...

Global site tag (gtag.js) - Google Analytics