数据结构--递归与分治

news2025/1/16 8:56:32

汉诺塔分析:

以三层进行分析,大于三层分析情况是一样的。

#include <stdio.h>

void move(int n,char x,char y,char z)
{
	if(1 == n)
	{
		printf("%c---------->%c\n",x,z);
	}
	else
	{
		move(n-1,x,z,y);//将第n-1个盘子从x借助z移动到y 
		printf("%c---------->%c\n",x,z);
		move(n-1,y,x,z);//将n-1个盘子从y借助x移动到z上 
	}
}

int main()
{
	int n;
	printf("Input n:");
	scanf("%d",&n);
	printf("移动的步骤\n");
	move(n,'x','y','z'); 
	return 0;
 } 

 

 八皇后问题:

#include <stdio.h>

int count = 0; 

int notDanger(int row ,int j,int (*chess)[8])
{
	int i,k;
	int flag1;
	//判断列方向 
	for(int i=0;i<8;i++)
	{
		if(*(*(chess+i)+j) != 0)
		{
			flag1 = 1;
			break;
		} 
	}
	//判断左上方
	for(i = row, k =j;i>=0&&k>=0;i--,k--)
	{
		if(*(*(chess+i)+k)!=0)
		{
			flag1=1;
			break;
		}
	 } 
	//判断右下方
	for( i = row, k =j;i<8&&k<8;i++,k++)
	{
		if(*(*(chess+i)+k)!=0)
		{
			flag1=1;
			break;
		}
	 } 
	//判断右上方
	for( i = row, k =j;i>=0&&k<8;i--,k++)
	{
		if(*(*(chess+i)+k)!=0)
		{
			flag1=1;
			break;
		}
	 } 
	//判断左下方
	for( i = row, k =j;i<8&&k>=0;i++,k--)
	{
		if(*(*(chess+i)+k)!=0)
		{
			flag1=1;
			break;
		}
	 } 
	if(flag1==1)
	{
		return 0;
	}
	else return 1;
}
// row:起始行  n:列数 chess[8]: 表示棋盘每一行指着 
void EightQueen(int row, int n, int (*chess)[8])
{
	int chess2[8][8];
	int i,j;
	for( i=0;i<8;i++)
	{
		for( j=0;j<8;j++)
			chess2[i][j]=chess[i][j];
	}
	if(8 == row)
	{
		printf("第 %d 种方法:\n",count+1);
		for(i=0;i<8;i++)
		{
			for( j=0;j<8;j++)
				printf("%d  ",*(*(chess2+i)+j));
			printf("\n");
		}
		printf("\n");
		count++;
	}
	else
	{
		//判断这个位置是否有危险
		//如果没有危险,继续往下
		for(j=0;j<n;j++)
		{
			if(notDanger(row,j,chess))//判断是否危险 (不危险) 
			{
				for(i=0;i<8;i++)
				{
					*(*(chess+row)+i) = 0;
				}
				*(*(chess2+row)+j) = 1;
				EightQueen(row+1,n,chess2);
			}
	    } 
	}
}

int main()
{
	int chess[8][8];
	int i,j;
	for(i=0;i<8;i++)
	{
		for(j=0;j<8;j++)
			chess[i][j]=0;
	}
	
	EightQueen(0,8,chess);
	printf("总共有 %d   种解决方法",count);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/914699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HBuilderX学习--运行第一个项目

HBuilderX&#xff0c;简称HX&#xff0c;是轻如编辑器、强如IDE的合体版本&#xff0c;它及轻巧、极速&#xff0c;强大的语法提示&#xff0c;提供比其他工具更优秀的vue支持大幅提升vue开发效率于一身(具体可看官方详细解释)… 一&#xff0c;HBuilderX下载安装 官网地址 …

前端基础(ES6 模块化)

目录 前言 复习 ES6 模块化导出导入 解构赋值 导入js文件 export default 全局注册 局部注册 前言 前面学习了js&#xff0c;引入方式使用的是<script s"XXX.js">&#xff0c;今天来学习引入文件的其他方式&#xff0c;使用ES6 模块化编程&#xff0c;…

浅谈泛在电力物联网发展形态与技术挑战

安科瑞 华楠 摘 要&#xff1a;泛在电力物联网是当前智能电网发展的一个方向。首先&#xff0c;总结了泛在电力物联网的主要作用和价值体现&#xff1b;其次&#xff0c;从智能电网各个环节概述了物联网技术在电力领域的已有研究和应用基础&#xff1b;进而&#xff0c;构思并…

Java接入支付宝支付

本文只接入了支付宝中的APP支付&#xff0c;如果要拓展更多支付方式的的话&#xff0c;请看文末补充 项目支付流程 前端发起创建订单请求后端接受请求创建订单&#xff0c;并将订单参数进行支付宝对应签名并返回前端拿到签名后调起支付宝支付 本文主要写的就是2的过程 前期准…

09 数据库开发-MySQL

文章目录 1 数据库概述2 MySQL概述2.1 MySQL安装2.1.1 解压&添加环境变量2.1.2 初始化MySQL2.1.3 注册MySQL服务2.1.4 启动MySQL服务2.1.5 修改默认账户密码2.1.6 登录MySQL 2.2 卸载MySQL2.3 连接服务器上部署的数据库2.4 数据模型2.5 SQL简介2.5.1 SQL通用语法2.3.2 分类…

【卷积神经网络】经典网络之 LeNet-5, AlexNet 与 VGG-16

随着计算机硬件的升级与性能的提高&#xff0c;运算量已不再是阻碍深度学习发展的难题。卷积神经网络&#xff08;Convolution Neural Network&#xff0c;CNN&#xff09;是深度学习中一项代表性的工作&#xff0c;其雏形是 1998 年 LeCun 提出的 LeNet-5 模型。如今&#xff…

Java后端开发面试题——微服务篇总结

Spring Cloud 5大组件有哪些&#xff1f; 随着SpringCloudAlibba在国内兴起 , 我们项目中使用了一些阿里巴巴的组件 注册中心/配置中心 Nacos 负载均衡 Ribbon 服务调用 Feign 服务保护 sentinel 服务网关 Gateway Ribbon负载均衡策略有哪些 ? RoundRobinRule&…

Selenium 捕获 console logs (Java)

目录 启用日志记录功能 有时候在进行自动化测试的时候控制台输出会帮忙定位问题&#xff0c;所以捕获控制台输出就显得很重要了~ 以下以selenium 4为例&#xff1a; 我们可以使用driver.manage().logs().get(LogType.BROWSER)代码在Selenium中检索日志&#xff0c;该代码将返回…

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 5 Signal/States标签页介绍

这一篇我们说下signals和State这两个怎么搞做映射,那首先我们要知道什么是Signal和state,我们看下模型, 在原来的模型里我增加了标红的圆圈处delay模块,这个delay模块就是一个state模块,表示离散的一个状态,这个是个模型的基本概念,后续我有个专栏交接simulink建模,那…

【JVM】运行时数据区域

文章目录 说明程序计数器虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存 说明 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直…

CSS scoped 属性的原理

scoped 一、scoped 是什么&#xff1f;二、实现原理 一、scoped 是什么&#xff1f; 在 Vue 组件中&#xff0c;为了使样式私有化&#xff08;模块化&#xff09;&#xff0c;不对全局造成污染&#xff0c;可以在 style 标签上添加 scoped 属性以表示它的只属于当下的模块&am…

(学习笔记-调度算法)进程调度算法

进程调度算法也称 CPU 调度算法&#xff0c;毕竟进程是由 CPU 调度的。 当 CPU 空闲时&#xff0c;操作系统就选择内存中标的某个 [就绪状态] 的进程&#xff0c;将其分配给 CPU。 什么时候会发生CPU调度呢&#xff1f;通常有以下情况&#xff1a; 当进程从运行状态转换到等待…

五种 CSS 位置类型以实现更好的布局

在 Web 开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;用于设置网站样式的设置。为了控制网页上元素的布局&#xff0c;使用CSS的position属性。因此&#xff0c;在今天这篇文章中&#xff0c;我们将了解 CSS 位置及其类型。 CSS 位置属性用于控制网页上元素的位置…

【vue3+ts项目】配置eslint校验代码工具,eslint+prettier+stylelint

1、运行好后自动打开浏览器 package.json中 vite后面加上 --open 2、安装eslint npm i eslint -D3、运行 eslint --init 之后&#xff0c;回答一些问题&#xff0c; 自动创建 .eslintrc 配置文件。 npx eslint --init回答问题如下&#xff1a; 使用eslint仅检查语法&…

linux中定时器的使用

在Linux中&#xff0c;可以使用timer_create、timer_settime和timer_delete等函数来创建和管理定时器。下面是一个简单的示例程序&#xff0c;演示如何在Linux中使用定时器&#xff1a; #include <stdio.h> #include <stdlib.h> #include <signal.h> #inclu…

Freertos第一课

freertos与裸机的区别 裸机的程序&#xff1a;一般是执行完一个任务后&#xff0c;再执行下一个任务。 freertos的程序&#xff1a;当存在不同优先级时&#xff0c;会把优先级比较高的任务执行完&#xff0c;再执行优先级较低的任务&#xff0c;当存在任务的优先级一样时&…

初步认识OSPF的大致内容(第三课)

1 路由的分类 直连路由&#xff08;Directly Connected Route&#xff09;是指网络拓扑结构中相邻两个网络设备直接相连的路由&#xff0c;也称为直接路由。如果两个设备属于同一IP网络地址&#xff0c;那么它们就是直连设备。直连路由表是指由计算机系统生成的一种用于路由选择…

根据源码,模拟实现 RabbitMQ - 虚拟主机 + Consume设计 (7)

目录 一、虚拟主机 Consume设计 1.1、承接问题 1.2、具体实现 1.2.1、消费者订阅消息实现思路 1.2.2、消费者描述自己执行任务方式实现思路 1.2.3、消息推送给消费者实现思路 1.2.4、消息确认 一、虚拟主机 Consume设计 1.1、承接问题 前面已经实现了虚拟主机大部分功…

Vim学习(四)——命令使用技巧

命令模式 打开文本默认模式&#xff0c;按**【ESC】**重新进入 【/关键字】&#xff1a;搜索匹配关键字 G&#xff1a;最后一行 gg&#xff1a;第一行 hjkl:左下右上 yy: 复制一行 dd&#xff1a;删除一行 p:粘贴 u: 撤销插入模式 按**【i / a / o】**键均可进入文本编辑模式…

2023年国赛 高教社杯数学建模思路 - 案例:退火算法

文章目录 1 退火算法原理1.1 物理背景1.2 背后的数学模型 2 退火算法实现2.1 算法流程2.2算法实现 建模资料 ## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&a…