C语言 之 n皇后问题

/*

 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);
        }
    }


}
阅读更多
个人分类: c语言  算法
上一篇Python的时间数据类型
下一篇c 语言学习 之对于动态内存分配的结构体的基于交换的排序
想对作者说点什么? 我来说一句

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

2009年05月24日 2KB 下载

n皇后问题的解决(c语言

2017年12月27日 471B 下载

C语言写的N皇后问题

2007年08月10日 4KB 下载

遗传算法解决n皇后问题

2008年01月03日 8KB 下载

用栈的n皇后问题源码+流程图

2018年04月09日 58KB 下载

分支限界法解决N皇后问题

2013年01月11日 2KB 下载

C语言实现n皇后问题

2010年05月25日 1KB 下载

八皇后,n皇后问题C语言实现

2009年05月22日 600B 下载

没有更多推荐了,返回首页

关闭
关闭