LeetCode 051 N-Queens

原创 2016年06月01日 08:04:04

题目是经典的n皇后问题。即在n乘n的国际象棋棋盘上放置n个皇后,让这些皇后互相不攻击到对方。

解法:
因为一行只能放置一个皇后,所以可以按行回溯求解。在回溯过程中可以快速判断当前位置是否可行:通过3个数组b,c,d来记录每列、每条右上到坐下的斜线、每条左上到右下的斜线是否存在皇后。(更快的是通过整数存储,使用位运算来判断)

代码:

class Solution {
public:
    int *a, *b, *c, *d;
    vector<string> sol;
    vector<vector<string>> result;

    void search(int i, int n) {
        if(i == n) {
            result.push_back(sol);
            return;
        }

        for(int k = 0 ; k < n ; k++) {
            if(!b[k] && !c[i + k] && !d[i - k + n - 1]) {
                b[k] = 1;
                c[i + k] = 1;
                d[i - k + n - 1] = 1;
                sol[i][k] = 'Q';
                search(i + 1, n);
                sol[i][k] = '.';
                b[k] = 0;
                c[i + k] = 0;
                d[i - k + n - 1] = 0;
            }
        }
    }

    vector<vector<string>> solveNQueens(int n) {
        a = new int[n];
        b = new int[n];
        c = new int[2*n];
        d = new int[2*n];
        memset(a, 0, sizeof(int) * n);
        memset(b, 0, sizeof(int) * n);
        memset(c, 0, sizeof(int) * 2 * n);
        memset(d, 0, sizeof(int) * 2 * n);

        string line;
        for(int j = 0 ; j < n ; j++)
            line += '.';

        for(int i = 0 ; i < n ; i++) {
            sol.push_back(line);
        }
        search(0, n);
        return result;
    }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LeetCode 051 N-Queens

题目 The n-queens puzzle is the problem of placing n queens on an n×n che...

LeetCode051 N-Queens

详细见:leetcode.com/problems/n-queens Java Solution: github package leetcode; import java.util...

LeetCode---N-Queens

题目大意:将N个皇后摆放在N*N的棋盘上,要求N个皇后彼此间不能相互攻击。 算法思想: 采用一个数组C[n]记录每一行皇后所在位置的列下标,一个数组column[n]记录当前局面以后皇后所在的列,...

leetcode第一刷_N-Queens

八皇后问题应该是回溯法的教学典范。在本科的时候,有一门课叫面向对象,最后的附录有这个问题的源代码,当时根本不懂编程,照抄下来,运行一下出了结果都很开心,哎。 皇后们的限制条件是不能同行同列,也不能同...

【LeetCode】51. N-Queens

51. N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that...

LeetCode-N-Queens

作者:disappearedgod 文章出处:http://blog.csdn.net/disappearedgod/article/details/24662201 时间:2014-4-28 ...

LeetCode N-Queens

Description: The n-queens puzzle is the problem of placing n queens on an n×n chessboard such t...

LeetCode 50 N-Queens

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

LeetCode52——N-Queens II

LeetCode52——N-Queens II 跟LeetCode51一样,只不过这题是求解解的个数。 这里我套用了上一题的代码,只不过当row==n(递归返回条件)时,不是将一种可行解加入结果集...

[leetcode] 52.N-Queens II

题目:Follow up for N-Queens problem.Now, instead outputting board configurations, return the total num...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)