C语言 之 n皇后问题

3人阅读 评论(0) 收藏 举报
分类:

/*

 author:  yanghongchao

time: 2018/4/17

*/

#include <stdio.h>

#define MAX_NUMBER 100


int main()
{
    int number_of_queen(int a[], int n, int k, int j, int count);
    int n;
    int m;
    scanf("%d", &n);
    int a[MAX_NUMBER] = {-1};
    m = number_of_queen(a, n, 0, 0, 0);
    printf("the n latitice have maximal %d queen.\n", m);
    return 0;
}


int number_of_queen(int a[], int n, int k, int j, int count) //a[n] 为 n元数组第i个位置的元素k表示第i行的第k列放kueen,
{
    if (k == 0 && j >= n)
    {
        return count;
    }
    if (k == n)
    {
        int x;
        for (x=0; x<n; x++) printf("%d ", a[x]);
        printf("\n");
        count++;
        j = a[k-1] + 1; a[k-1] = -1;
        number_of_queen(a, n, k-1, j, count);
    }
    else
    {
        int i = 0;
        int b[100] = {0};
        for (i = 0; i < k; i++){      // 建立一个列表来确定在当前的行,第k行不能填数字的位置标记为1
            b[a[i]] = 1;
            if (0 <= a[i] + k - i && a[i] + k - i < n)
                b[a[i]+k-i] = 1;
            if (0 <= a[i] + i - k && a[i] + i -k < n)
                b[a[i]+i-k] = 1;
        }
        while (b[j] != 0)
            j++;                      //    由数字j开始搜索第一个能填入的数字
        if (j >= n){
            j = a[k-1] + 1; a[k-1] = -1;
            number_of_queen(a, n, k-1, j, count);
        }
        else if (j < n && k < n){
            a[k] = j;
            number_of_queen(a, n, k + 1, 0, count);
        }
    }


}
查看评论

递归求解N皇后问题(c语言)

/**//*=====N皇后问题*/#include stdio.h>#include conio.h>#include "../include/type.h"/**//*包含枚举变量bool的typ...
  • hichi2000
  • hichi2000
  • 2008-04-28 10:57:00
  • 3099

n皇后问题的两种递归方法C语言实现

1.递归回溯法 #include #include #define N 15 int x[N]; //皇后放置的列数 int n; //皇后个数 int...
  • qinfenziqiang
  • qinfenziqiang
  • 2014-05-18 11:50:06
  • 4444

C语言使用递归来实现N皇后问题的算法设计

  • 2009年12月07日 18:16
  • 703B
  • 下载

n皇后问题c语言编程

  • 2013年04月19日 19:29
  • 947B
  • 下载

N皇后问题(位运算,C语言版)

  • 2009年05月24日 23:40
  • 2KB
  • 下载

N皇后问题的C语言实现

  • 2015年06月30日 14:33
  • 675B
  • 下载

C语言实现N皇后问题源代码

 *********************以下程序经本人在TC下编译通过*********************** #include#includevoid pr(); void init();...
  • weiguijiji
  • weiguijiji
  • 2009-04-11 08:26:00
  • 767

[算法]经典算法8皇后(N皇后)问题的解法,C语言实现

今天写点简单的,C语言求解八皇后问题,相信学过C语言的朋友一定知道这个经典问题吧,解法也是多种,目前主要有回溯,递推两种方法,今天讲回溯+递归的求法,效率可能不太高,不过直接易于理解问题 : 能不能在...
  • yctccg
  • yctccg
  • 2016-08-16 10:38:37
  • 2455

蓝桥杯练习题—— 2n皇后问题

/* *************************************** Title: 蓝桥杯练习题—— 2n皇后问题 ******************************...
  • youqi1shi
  • youqi1shi
  • 2014-03-17 05:17:04
  • 2405

蓝桥杯C语言基础练习 2n皇后问题

题目描述给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条...
  • zhangge138
  • zhangge138
  • 2018-03-04 16:39:20
  • 42
    个人资料
    持之以恒
    等级:
    访问量: 726
    积分: 191
    排名: 91万+
    文章存档