N-Queens 1&2

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 distinct solutions to the n-queens puzzle.

Each solution contains a distinct board configuration of the n-queens‘ placement, where ‘Q‘ and ‘.‘ both indicate a queen and an empty space respectively.

For example,
There exist two distinct solutions to the 4-queens puzzle:

[
 [".Q..",  // Solution 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // Solution 2
  "Q...",
  "...Q",
  ".Q.."]
]solution:经典八皇后问题(这里是n),用递归算法解决ps:国际象棋中,皇后会攻击横行竖行和斜线的位置的棋子。楼主用的二维数组比较直观。
package leetcode2;
import java.util.*;
public class N_QUEEN {
    public static ArrayList<String[]> Nqueen(int n){
        ArrayList<String[]> res=new ArrayList<String[]>();
        char[][] location=new  char[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                location[i][j]=‘.‘;
            }
        }
        int count=0;
        Queens(res,n,0,count,location);
        System.out.print("\t"+res.size()+"  \n");
        return res;

    }
    public static void Queens(ArrayList<String[]> res,int n,int deep,int count,char[][] location1){
          if(n==0){
            String[] sub=new String[location1.length];
            for(int i=0;i<location1.length;i++){
             sub[i]=new String(location1[i]);
             System.out.print("   "+sub[i]);
            }
            res.add(sub);
            count++;
        //    System.out.print(count);
            return;
        }
        for(int y=0;y<location1.length;y++) {
        if(isvaild(deep,y,location1)){
            location1[y][deep]=‘Q‘;
            Queens(res,n-1,deep+1,count,location1);
            location1[y][deep]=‘.‘;
        }

        }

    }

    public static boolean isvaild(int y, int x,char[][] location) {
        // TODO Auto-generated method stub
        boolean flag=true;
       for(int i = 0; i < location.length; i++) {
                if(location[i][y] == ‘Q‘ || location[x][i] == ‘Q‘) return false;
            }
            //left diagonal
            for(int i = x, j = y; i >=0 && j>=0; j--, i--)
                if(location[i][j] == ‘Q‘) return false;
            for(int i = x, j = y; i <location.length && j>=0; j--, i++)
                if(location[i][j] == ‘Q‘) return false;
            return true;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
      System.out.println(Nqueen(4));
    }

}
				
时间: 2024-10-11 18:59:13

N-Queens 1&2的相关文章

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

题目: N皇后问题 n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击.<不同行,不同列,不同对角线> 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置. 样例 对于4皇后问题存在两种解决的方案: [ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], [&qu

Python----递归------Eight Queens 八皇后问题

递归思想是算法编程中的重要思想. 作为初学者,对递归编程表示很蒙逼,每次遇到需要递归的问题,心里就有一万头草泥马飞过~~~~~~(此处略去一万头草泥马) 在B站看数据结构与算法的视频时,视频中给了两个非常典型的例子--<汉诺塔>和<八皇后问题>,就希望自己用Python实现一下这两个递归程序,其中汉诺塔问题比较简单,还是能够理解,这里就不讲了. <八皇后问题>:说要在一个棋盘上放置8个皇后,但是不能发生战争,皇后们都小心眼,都爱争风吃醋,如果有人和自己在一条线上(水平.

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:

051 N Queens

此题即在 052 N Queens 2 基础上稍作改进 并注意返回格式就好 import copy class Solution: def __init__(self): self.ans = [] # @param {integer} n # @return {integer} def solveNQueens(self, n): self.helper(0,[["."]* n for i in range(0,n)],n) return self.ans def helper(se

Sicily 1172. Queens, Knights and Pawns

Constraints Time Limit: 1 secs, Memory Limit: 64 MB Description You all are familiar with the famous 8-queens problem which asks you to place 8 queens on a chess board so no two attack each other. In this problem, you will be given locations of queen

54. 八皇后问题[eight queens puzzle]

[本文链接] http://www.cnblogs.com/hellogiser/p/eight-queens-puzzle.html [题目] 在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行.同一列或者同一对角斜线上.下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法.请求出总共有多少种摆法. [分析] 之前博文28.字符串的排列[StringPermutation]介绍过字符串的全排列,八皇后问题也可以转换为全排列问题. 由于八个皇后的任意两个不

poj3239 Solution to the n Queens Puzzle (n皇后问题)

Solution to the n Queens Puzzle Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 3494   Accepted: 1285   Special Judge Description The eight queens puzzle is the problem of putting eight chess queens on an 8 × 8 chessboard such that none

[Leetcode] n queens n皇后问题

The n-queens puzzle is the problem of placing n queens on an n×nchessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. Each solution contains a distinct board configuration of t

SGU 224.Little Queens

时间限制:0.75s 空间限制:6M 题意 n*n(n<=10)的棋盘,求出放置m(m<=n*n)个皇后的方案数. Solution: 状态压缩+位运算  搜索. 首先我们从上往下逐行放置, DFS(line, row, l, r, k) line :当前行号 row:列状态 l:\ 左上对角线状态 r:/右上对角线状态 k:已放置棋子数 对于每一行有不放或者放一个棋子两种方案 放一个棋子时又要考虑哪些位置可以放置, 状态压缩(row,r,l): 例如当n=4时 二进制数 1=(0001)2代

【算法】N Queens Problem

/* ** 目前最快的N皇后递归解决方法 ** N Queens Problem ** 试探-回溯算法,递归实现 */ #include "stdafx.h" #include "iostream" #include <math.h> using namespace std; #include "time.h" // sum用来记录皇后放置成功的不同布局数:upperlim用来标记所有列都已经放置好了皇后. long sum = 0,