51. N皇后

article/2025/10/14 4:05:42

51. N皇后 

https://leetcode-cn.com/problems/n-queens/ 

 

四皇后的解

n个皇后, n×n 的棋盘上 根据要求

  • 每行有且仅有一个皇后(如果有一行没有那么必有一行至少两个皇后,不符合)

递归回溯,每次尝试在一行中摆放皇后,如果不能摆放回退到上一行 

有些位置没必要去尝试,比如下面这张图当第一行选择的是(0, 0) 第二行(1, 0)(1, 1)是没必要尝试的位置,直接从(1, 3)开始也就是2 3 位置

通过辅助数组我们可以快速判断这个点是否合法 

右上到左下

  • i 行
  • j 列

 

左上到右下

  • i 行
  • j 列

 

/// 51. N-Queens
/// https://leetcode.com/problems/n-queens/description/
/// 时间复杂度: O(n^n)
/// 空间复杂度: O(n)
public class Solution {//行private boolean[] col;//左下 <- 右上private boolean[] dia1;//左上 -> 右下private boolean[] dia2;private ArrayList<List<String>> res;public List<List<String>> solveNQueens(int n) {res = new ArrayList<>();col = new boolean[n];//2*n-1个斜线dia1 = new boolean[2 * n - 1];dia2 = new boolean[2 * n - 1];LinkedList<Integer> row = new LinkedList<>();putQueen(n, 0, row);return res;}/*** 尝试在一个n皇后问题中, 摆放第index行的皇后位置* @param n n皇后* @param index index行* @param row 这个皇后放在这一行的哪一列*/private void putQueen(int n, int index, LinkedList<Integer> row) {if (index == n) {res.add(generateBoard(n, row));return;}for (int i = 0; i < n; i++)// 尝试将第index行的皇后摆放在第i列if (!col[i] && !dia1[index + i] && !dia2[index - i + n - 1]) {row.addLast(i);col[i] = true;dia1[index + i] = true;dia2[index - i + n - 1] = true;putQueen(n, index + 1, row);col[i] = false;dia1[index + i] = false;dia2[index - i + n - 1] = false;row.removeLast();}}/*** 构建出这个解* @param n n皇后* @param row 每个值代表 皇后放哪一行的哪一列 (i=0 是值为 3 代码第一行的皇后在4列的位置)*/private List<String> generateBoard(int n, LinkedList<Integer> row) {//assert row.size() == n;ArrayList<String> board = new ArrayList<>();for (int i = 0; i < n; i++) {char[] charArray = new char[n];Arrays.fill(charArray, '.');charArray[row.get(i)] = 'Q';board.add(new String(charArray));}return board;}//private static void printBoard(List<String> board) {//    for (String s : board) {//        System.out.println(s);//    }//    System.out.println();//}//public static void main(String[] args) {//    int n = 4;//    List<List<String>> res = (new Solution()).solveNQueens(n);//    for (List<String> board : res) {//        printBoard(board);//    }//}
}

P1219 八皇后 

https://www.luogu.org/problem/P1219

import java.util.Scanner;
public class Main {private static int counts = 0;//统计次数private static int n;private static int outputNum = 0;private static boolean[] row;//col 行private static boolean[] dia1;//左下 <- 右上private static boolean[] dia2;//左上 -> 右下public static void main(String[] args) {Scanner input = new Scanner(System.in);n = input.nextInt();row = new boolean[n];dia1 = new boolean[2 * n - 1];dia2 = new boolean[2 * n - 1];int[] tempRow = new int[n];queen(0, tempRow);System.out.println(counts);input.close();}private static void queen(int index, int[] tempRow) {if (index == n) {outputNum++;counts++;//只输出前面3个if (outputNum <= 3) {for (int i = 0; i < n; i++) {//我下标是重0开始的所以这里需要+1System.out.print(tempRow[i] + 1 + " ");}System.out.println();}return;}for (int j = 0; j < n; j++) {if (!row[j] && !dia1[index + j] && !dia2[index - j + n - 1]) {tempRow[index] = j;row[j] = true;dia1[index + j] = true;dia2[index - j + n - 1] = true;queen(index + 1, tempRow);row[j] = false;dia1[index + j] = false;dia2[index - j + n - 1] = false;}}}
}

 


52. N皇后 II 

https://leetcode-cn.com/problems/n-queens-ii/

public class Solution {//行private boolean[] col;//左下 <- 右上private boolean[] dia1;//左上 -> 右下private boolean[] dia2;private int totalCount = 0;public int totalNQueens(int n) {col = new boolean[n];//2*n-1个斜线dia1 = new boolean[2 * n - 1];dia2 = new boolean[2 * n - 1];int[] row = new int[n];putQueen(n, 0, row);return totalCount;}/*** 尝试在一个n皇后问题中, 摆放第index行的皇后位置* @param n     n皇后* @param index index行* @param row   这个皇后放在这一行的哪一列*/private void putQueen(int n, int index, int[] row) {if (index == n) {totalCount++;return;}for (int i = 0; i < n; i++)// 尝试将第index行的皇后摆放在第i列if (!col[i] && !dia1[index + i] && !dia2[index - i + n - 1]) {row[index] = i;col[i] = true;dia1[index + i] = true;dia2[index - i + n - 1] = true;putQueen(n, index + 1, row);col[i] = false;dia1[index + i] = false;dia2[index - i + n - 1] = false;}}//public static void main(String[] args) {//    int n = 8;//    System.out.println(new Solution().totalNQueens(n));//}
}

37. 解数独 

https://leetcode-cn.com/problems/sudoku-solver/

 


http://chatgpt.dhexx.cn/article/NahW3NM2.shtml

相关文章

递归算法——n皇后

** 递归算法——n皇后 ** n皇后问题&#xff1a; 输入整数n&#xff0c;要求n个国际象棋的皇后&#xff0c;摆在n*n的棋盘上&#xff0c;互相不能攻击&#xff0c;输出全部方案。 输入&#xff1a; 输入一个正整数N。 输出&#xff1a; 程序输出N皇后问题的全部摆法。 行里…

kettle连接mysql教程_KETTLE初学者使用教程

Kettle的建立数据库连接、使用kettle进行简单的全量对比插入更新:kettle会自动对比用户设置的对比字段,若目标表不存在该字段,则新插入该条记录。若存在,则更新。 Kettle简介:Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳…

Kettle Spoon 安装配置详解

文章目录 1 概述2 安装2.1 软件下载2.2 JDK 环境变量配置2.3 数据库驱动包下载2.4 双击 Spoon.bat 启动 3 简单使用3.1 transformation 转换3.1.1 文件 - 新建 - 转换3.1.2 核心对象 - 输入 - 表输入3.1.3 核对对象 - 输出 - 插入/更新3.1.4 保存 - xxx.ktr 3.2 job 作业3.2.1 …

Spoon安装步骤

主数据库连接步骤 主对象树点击转换&#xff0c;双击DB连接 配置信息完成后点击测试成功 二&#xff0e;源数据库连接步骤 1.点击Connect,点击other repositories 2.点击Database Repository 编辑名称&#xff08;注意必须用英文&#xff09; 再点击数据库连接 配置选项 …

kettle下载安装使用教程

Kettle简介 Kettle是一款国外开源的ETL工具&#xff0c;纯java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c; 数据抽取高效稳定。Kettle 中文名称叫水壶&#xff0c;该项目的主程序员MATT 希望把各种数据放到一个壶里&#xff0c;然后以一种指定的格式流出。K…

KETTLE使用教程

Kettle的建立数据库连接、使用kettle进行简单的全量对比插入更新&#xff1a;kettle会自动对比用户设置的对比字段&#xff0c;若目标表不存在该字段&#xff0c;则新插入该条记录。若存在&#xff0c;则更新。 Kettle简介&#xff1a;Kettle是一款国外开源的ETL工具&#xff0…

spoon mysql教程_kettle 教程(一):简介及入门

介绍 kettle 是纯 java 开发&#xff0c;开源的 ETL工具&#xff0c;用于数据库间的数据迁移 。可以在 Linux、windows、unix 中运行。有图形界面&#xff0c;也有命令脚本还可以二次开发。 安装 这边以 windows 下的配置为例&#xff0c;linux 下配置类似。 jdk 安装及配置环境…

kettle基础使用教程

文章目录 前言一、下载、安装二、启动软件三、转换的使用教程四、作业的使用教程总结 前言 Kettle简介&#xff1a;Kettle是一款国外开源的ETL工具&#xff0c;纯java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;数据抽取高效稳定。Kettle 中文名称叫水壶&…

ETL工具-Kettle Spoon教程

转自&#xff1a;https://blog.csdn.net/liaomin416100569/article/details/82798879 一 。Kettle Spoon简介 ETL&#xff08;Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程&#xff09;&#xff0c;对于企业或行业应用来说&#xff0c;我们经常会遇…

KETTLE 使用教程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Kettle的建立数据库连接、使用kettle进行简单的全量对比插入更新&#xff1a;kettle会自动对比用户设置的对比字段&#xff0c;若目标表…

spoon mysql教程_Kettle-Spoon入门示例

Spoon 是Kettle的设计调试工具 1.驱动: a) 驱动错误 b) 驱动添加 2.端口错误&#xff1a;连接数据库端口不对 3.正常连接 4.表输入 a) 新建一个表输入&#xff0c;获取数据库表的数据 b) 预览数据 c) 当前表数据输出到另外一个同样的表 d) 当前表数据输出到另外一个同样的表 e)…

数据库转换工具 spoon使用

由于项目需求 需要把oracle数据库转换为mysql数据库&#xff0c;所以使用spoon转换&#xff0c;简单快捷 ETL Kettle Spoon简介 ETL&#xff08;Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程&#xff09;&#xff0c;对于企业或行业应用来说&#…

spoon mysql教程_spoon新手入门教程

Kettle是一款国外开源的ETL工具&#xff0c;纯java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;数据抽取高效稳定。Kettle 中文名称叫水壶&#xff0c;该项目的主程序员MATT 希望把各种数据放到一个壶里&#xff0c;然后以一种指定的格式流出。Kettle这个ETL工…

Kettle工具简单使用(spoon)

1、添加测试数据 在navicat中随便找个表当做被转化的数据进行测试&#xff0c;以下表为例&#xff1a; 在SQL server数据库中创建表 2、下载spoon软件 下载路径&#xff1a;https://download.csdn.net/download/qq_57404736/85013576 打开文件夹&#xff0c;双击spoon.ba…

Spoon工具的使用

Spoon工具的使用 第一步 建立中间表 create table table_name ( code varchar(100), name varchar(100) )第二步 新建转换 在核心对象 输入中找到表输入双击&#xff0c; 输出中找到表输出双击 第三步&#xff0c;双击表输入进入该界面 点新建进入如下界面 填写信息后点T…

spoon入门教程

Kettle是一款国外开源的ETL工具&#xff0c;纯java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;数据抽取高效稳定。Kettle 中文名称叫水壶&#xff0c;该项目的主程序员MATT 希望把各种数据放到一个壶里&#xff0c;然后以一种指定的格式流出。Kettle这个ETL工…

Spoon工具使用(kettle进行实时同步数据)

文章目录 Spoon工具使用&#xff08;kettle进行实时同步数据&#xff09;安装相关概念转换DB连接步骤和节点连接 作业DB连接作业项目 Spoon工具使用&#xff08;kettle进行实时同步数据&#xff09; 安装 解压完Spoon安装包后&#xff0c;双击.bat文件打开 相关概念 转换…

Kettle Spoon入门教程

Kettle是一款国外开源的ETL工具&#xff0c;纯java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;数据抽取高效稳定。其中&#xff0c;Spoon是Kettle中的一个组件&#xff0c;其他组件有PAN&#xff0c;CHEF&#xff0c;Encr和KITCHEN等。 Spoon通过图形化的页…

nethogs查看每个进程流量

sudo nethogs 找到每个进程消耗流量的pid 通过ps -ef | grep pid 来查看对应的任务。 再如&#xff1a; datanode带宽打满&#xff0c;会导致dn写数据非常慢 参考链接&#xff1a;每天学习一个命令&#xff1a;使用 nethogs 查看每个进程流量

NetHogs下载和监控

转自&#xff1a;http://blog.csdn.net/testcs_dn/article/details/40506225 CentOS6.5下使用NetHogs监控进程网络使用情况 分类&#xff1a; CentOS2014-10-27 13:54 5789人阅读 评论(3) 收藏 举报 目录(?)[] Nethogs 是一个终端下的网络流量监控工具&#xff0c;它的特别之处…