52. N-Queens II

Problem statement:

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

Solution:

Compare with 51. N-Queens, this problem wants the number of  possible solutions. It also belongs to DFS, however, it belongs to another DFS template.

The return value of DFS function should be an integer instead of void. In each level DFS, the return value should be the sum of lower level result. The return value of final result is the DFS result from 0.

class Solution {
public:
    int totalNQueens(int n) {
        vector<string> solu(n, string(n, ‘0‘));
        return NQueens(solu, 0, n, n);
    }
private:
    int NQueens(vector<string>& solu, int row, int col, int n){
        if(row == n){
            return 1;
        }
        int cnt = 0;
        for(int i = 0; i < col; i++){
            if(isvalid(solu, row, i, n)){
                solu[row][i] = ‘Q‘;
                cnt += NQueens(solu, row + 1, col, n);
                solu[row][i] = ‘.‘;
            }
        }
        return cnt;
    }
    bool isvalid(vector<string>& solu, int row, int col, int n){
        for(int i = row - 1, left = col - 1, right = col + 1; i >= 0; i--, left--, right++){
            if(solu[i][col] == ‘Q‘ || (left >= 0 && solu[i][left] == ‘Q‘) || (right < n && solu[i][right] == ‘Q‘)){
                return false;
            }
        }
        return true;
    }
};        
时间: 2024-10-12 21:23:46

52. N-Queens II的相关文章

[leetcode] 52. N皇后 II

52. N皇后 II 跟上个题一模一样,现在只需输出个数即可 class Solution { public int totalNQueens(int n) { boolean[] row = new boolean[n]; boolean[] h = new boolean[2 * n]; boolean[] r = new boolean[2 * n]; List<List<String>> ans = new ArrayList<>(); dfs(n, row,

lintcode 中等题:N Queens II N皇后问题 II

题目: N皇后问题 II 根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局. 样例 比如n=4,存在2种解决方案 解题: 和上一题差不多,这里只是求数量,这个题目定义全局变量,递归的时候才能保存结果,参考程序 java程序: class Solution { /** * Calculate the total number of distinct N-Queen solutions. * @param n: The number of queens. * @return:

[LeetCode 51&amp;52] N-Queens I &amp; II (N皇后问题)

题目链接:n-queens import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an integer n, return all dist

leetcode#52 N queensⅡ

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案的数量. 示例: 输入: 4 输出: 2 解释: 4 皇后问题存在如下两个不同的解法. [  [".Q..",  // 解法 1   "...Q",   "Q...",   "..Q."],  ["..Q.",  // 解法 2  

图论(网络流):SPOJ OPTM - Optimal Marks

OPTM - Optimal Marks You are given an undirected graph G(V, E). Each vertex has a mark which is an integer from the range [0..231 – 1]. Different vertexes may have the same mark. For an edge (u, v), we define Cost(u, v) = mark[u] xor mark[v]. Now we

2014年百度之星程序设计大赛 - 初赛(第二轮)Chess

题目描述:小度和小良最近又迷上了下棋.棋盘一共有N行M列,我们可以把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,"王"在棋盘上的走法遵循十字路线.也就是说,如果"王"当前在(x,y)点,小度在下一步可以移动到(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+2, y), (x-2, y), (x, y+2), (x, y-2) 这八个点中的任意一个. 小度觉得每次都是小良赢,没意思.为了难倒小良,他想出

HDU 5784 (计算几何)

Problem How Many Triangles (HDU 5784) 题目大意 给定平面上的n个点(n<2000),询问可以组成多少个锐角三角形. 解题分析 直接统计锐角三角形较困难,考虑问题的反面,统计直角三角形.钝角三角形.平角三角形(暂时这么叫吧QAQ). 首先枚举三角形的一个端点A,对其他点进行象限为第一关键字,极角为第二关键字排序. 然后使用三个指针,进行O(n)的扫描. 具体做法为用 i 指针指向三角形的第二个端点B.我们可以假想通过平移和旋转,把A点置于平面直角坐标系的原点,

Leetcode题解(十八)

51.N-Queens ---------------------------------------------------------------------------------分割线------------------------------------------------------------------ 52.N-Queens II ------------------------------------------------------------------------

Java MD5加密类

1 /************************************************* 2 md5 类实现了RSA Data Security, Inc.在提交给IETF 3 的RFC1321中的MD5 message-digest 算法. 4 *************************************************/ 5 public class MD5 { 6 /* 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define

Hibernate+jsp+struts+spring做增删该查,

同样还是web项目,这里只做了一张表,做一个测试,例子.主要是建Hibernate 的时候要非常注意,有时间了整理一下建Hiberbnate 的时候需要注意的事项 这里我是建了5个包,其实只要四个就好,那个service包和action包可以放在一起的,其他的是1.实体包:2.接口包(写方法名的):3.接口实现包(实现接口的方法):4.action包(数据逻辑) 一.实体包,这里是自动生成的,但是强迫症还是把它放在这里了啊 1 package com.chinasofti.sh2.entity;