递归算法——n皇后

article/2025/10/14 4:26:18

**

递归算法——n皇后

**
n皇后问题:
输入整数n,要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案。

输入:
输入一个正整数N。

输出:
程序输出N皇后问题的全部摆法。
行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。
皇后的行、列编号都是从1开始算起。

输入样例:
4
输出样例:
2 4 1 3
3 1 4 2

解题思路:
国际象棋皇后的走法是横、直、斜均可走,但每次只能走一格。

问题要求把n个皇后放在一个n*n的棋盘上,使得任何两个皇后都不能相互攻击,即它们不能同行,不能同列,也不能位于同一条对角线上。对于n= 1,问题的解很简单,而且很容易看出对于n=2和n=3来说,这个问题是无解的。

所以我们以4皇后问题为例,用递归法对它求解。
因为每个皇后都必须分别占据一行,我们需要做的不过是为棋盘上的每个皇后分配一列。

我们从空棋盘开始,然后把皇后1放到它所在行的第一个可能位置上,也就是第一行第一列。对于皇后2,在经过第一列和第二列的失败尝试之后,我们把它放在第一个可能的位置,就是格子(2, 3),位于第二行第三列的格子。这被证明是一个死胡同,因为皇后3将没有位置可放。所以,该算法进行递归,把皇后2放在下一个可能位置(2, 4)上。这样皇后3就可以放在(3, 2),这被证明是另一个死胡同。该算法然后就递归到底,把皇后1移到(1,2), 接着皇后2到(2,4), 皇后3到(3,1), 而皇后4到(4, 3), 这就是该问题的一个解。
在这里插入图片描述
代码:

#include<stdio.h>
#include<math.h>
int N;//皇后的数量,以及棋盘的大小 N*N 
int queenPos[100];//皇后在棋盘中每一行的列号 
void NQueen(int k)//表示行位置 
{int i;//表示列位置 if(k==N)//当k=n时,就是要摆放最后一行的皇后 {for(i=0;i<N;i++){printf("%d",queenPos[i]+1);	//C语言从0开始计数,所有输出需要加1		}		}else {for(i=0;i<N;i++)//遍历每一个皇后 {int j;for(j=0;j<k;j++){if(queenPos[j]==i||abs(queenPos[j] - i)==abs(k-j))//queenPos[j]相当于上一层的queenPos[k]的值 {break;}}if(j==k)						{	        	     	queenPos[k]=i;	NQueen(k+1);	} } }return ;} 
int main()
{scanf("%d",&N);//输入皇后数量 NQueen(0);	return 0;		
} 

运行结果:
在这里插入图片描述


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

相关文章

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;它的特别之处…

Centos7 部署 Nethogs

可用来按进程或程序实时统计网络带宽使用率 安装依赖包 yum install libpcap libpcap-devel epel-release -y 安装epel源 yum install epel-release -y 安装Nethogs yum install nethogs -y 运行测试 查看版本 nethogs -V version 0.8.5 直接执行nethogs界面如下 监控…