zoukankan      html  css  js  c++  java
  • BASIC-27 2n皇后问题


    问题描述


      给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。

    输入格式


      输入的第一行为一个整数n,表示棋盘的大小。
      接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。

    输出格式


      输出一个整数,表示总共有多少种放法。

    样例输入


    4
    1 1 1 1
    1 1 1 1
    1 1 1 1
    1 1 1 1
    样例输出
    2

    样例输入


    4
    1 0 1 1
    1 1 1 1
    1 1 1 1
    1 1 1 1
    样例输出


    0

    代码


    #include <stdio.h>
    
    int go(int* a, int* b, int* c, int m, int n)
    {
        if (m == n)
            return 1;
            
        int i, j, k, count = 0;
        for (i = 0; i < n; i++)
        {
            if (a[m * n + i] == 0)
                continue;
            for (j = 0; j < m; j++)
                if (b[j] == i || b[j] - i == j - m || b[j] + j == i + m)
                    break;
            if (j == m)
            {
                b[m] = i;
                for (k = 0; k < n; k++)
                {
                    if (a[m * n + k] == 0 || k == i)
                        continue;
                    for (j = 0; j < m; j++)
                        if (c[j] == k || c[j] - k == j - m || c[j] + j == k + m)
                            break;
                    if (j == m)
                    {
                        c[m] = k; 
                        count += go(a, b, c, m + 1, n);
                    }
                }
            }
        }
        return count;
    }
    
    int main()
    {
        int a[64], b[8], c[8], i, j, n;
        scanf("%d", &n);
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)scanf("%d", &a[i * n + j]);
                
        printf("%d", go(a, b, c, 0, n));
        return 0;
    }
  • 相关阅读:
    数据库使用--MySQL: InnoDB 还是 MyISAM?
    数据库使用3--索引系列
    数据库使用1--注意事项
    数据库使用2--索引系列
    学习FFmpeg API
    几种常见 容器 比较和分析 hashmap, map, vector, list ...hash table
    tiny中文乱码问题,不过仅适用于windows,所以xml不可以出现中文
    【NumPy】numpy数组类型
    【1.1】Scrapy抓取4步走、新建项目
    django+markdown
  • 原文地址:https://www.cnblogs.com/secret114/p/4333339.html
Copyright © 2011-2022 走看看