52. N皇后 II

题目:皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

 

 

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回 n 皇后不同的解决方案的数量。

示例:

输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]

 

 

 

代码1://直接使用51题代码。

class Solution {
    static int count=0;
    public int totalNQueens(int n) {
    count=0;
     var arraylist=new ArrayList<String>(n);
     char[] ch=new char[n];
     Arrays.fill(ch,'.');
     StringBuilder str=new StringBuilder();
     str.append(ch);
    backTrack(arraylist,1,n,str);
    return count;
    }

    //回溯法,递归循环查找解集
    public static void backTrack(List<String> arraylist,int t,int n,StringBuilder str){
        if(t>n){
         count++;
         return;
        }

        for(int i=0;i<n;i++){
            str.setCharAt(i,'Q');
            arraylist.add(str.toString());
            if(isOk(arraylist)){
                str.setCharAt(i,'.');
                backTrack(arraylist,t+1,n,str);}         //String是引用传递
            arraylist.remove(arraylist.size()-1);
            str.setCharAt(i,'.');
        }
    }
    public static boolean isOk(List<String> arraylist){
     if(arraylist.size()==1){return true;}
     int[] index=new int[arraylist.size()];
     index[arraylist.size()-1]=arraylist.get(arraylist.size()-1).indexOf('Q');
     
      //arr数组存放每行皇后的位置i为行,arr[i]为列数
      for(int i=0;i<arraylist.size()-1;i++){
          index[i]=arraylist.get(i).indexOf('Q');
          if(index[arraylist.size()-1]==index[i]){return false;}          
      }

      //排查斜线上,列数不能为上i行列数不能为这一行的+i|-i列      
      for(int i=arraylist.size()-2,j=1;i>=0;--i,++j){
          if(index[arraylist.size()-1]==index[i]-j || index[arraylist.size()-1]==index[i]+j){return false;}          
      }
      return true;
    }
}

 

 

posted @   堤苏白  阅读(45)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示