数据结构--递归与分治

汉诺塔分析:

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

#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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nmon的安装与使用

一、Linux服务器配置信息 操作系统&#xff1a;CentOS 7.6 64位&#xff08;可用命令&#xff1a;cat /etc/redhat-release和uname -a查看&#xff09; CPU&#xff1a;1核&#xff08;可用命令top查看&#xff09; 内存&#xff1a;2GB&#xff08;可用命令free查看&#xff…

修改Jupyter Notebook默认打开路径

这里我是重新下载的anaconda&#xff0c;打开Jupyter之后是默认在C盘的一个路径的&#xff0c;现在我们就来修改一下它的一个默认打开路径&#xff0c;这样在我们后续学习过程中&#xff0c;可以将ipynb后缀的文件放在这个目录下就能查看了。 1、先打开Anaconda Prompt&#x…

【大模型】基于 LlaMA2 的高 star 的 GitHub 开源项目汇总

【大模型】基于 LlaMA2 的高 star 的 GitHub 开源项目汇总 Llama2 简介开源项目汇总NO1. FlagAlpha/Llama2-ChineseNO2. hiyouga/LLaMA-Efficient-TuningNO3. yangjianxin1/FireflyNO4. LinkSoul-AI/Chinese-Llama-2-7bNO5. wenge-research/YaYiNO6. michael-wzhu/Chinese-LlaM…

jmeter 性能测试用 csv

⏩很多人在使用 jmeter 做接口测试、自动化测试和性能测试时&#xff0c;都喜欢用 CSV 数据文件设置功能&#xff0c;来读取准备好的测试数据。虽然这种方法并不是最优方案&#xff0c;在我们的性能测试课程中&#xff0c;讲解了更优的方案&#xff0c;但是&#xff0c;没有上过…

Elasticsearch算分优化方案之rescore_query

简介 今天来说一说Elasticsearch 的重新评分&#xff0c;即在检索出来一次结果的基础上在进行检索提升数据排序效果&#xff0c;但是仅对查询或者post_filter阶段返回的前多少条进行二次查询。在每个分片上进行二次检索的文档数量时可以通过window_size 控制的&#xff0c;该参…

对《VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeBasic动态库》的改进

《VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeBasic动态库》使用的Activex DLL公共对象是需要先注册的。https://blog.csdn.net/weixin_45707491/article/details/132437502?spm1001.2014.3001.5501 Activex DLL事前注册&#xff0c;一次多用说起来也不是啥大问题&#x…

[C++] STL_vector 迭代器失效问题

文章目录 1、前言2、情况一&#xff1a;底层空间改变的操作3、情况二&#xff1a;指定位置元素的删除操作4、g编译器对迭代器失效检测4.1 扩容4.2 erase删除任意位置&#xff08;非尾删&#xff09;4.3 erase尾删 5、总结 1、前言 **迭代器的主要作用就是让算法能够不用关心底…

Python通过matplotlib动态绘图实现中美GDP历年对比趋势动图

随着中国的各种实力的提高&#xff0c;经常在各种媒体上看到中国与各个国家历年的各种指标数据的对比&#xff0c;为了更清楚的展示历年的发展趋势&#xff0c;有的还做成了动图&#xff0c;看到中国各种指标数据的近年的不断逆袭&#xff0c;心中的自豪感油然而生。今天通过Py…

Eagle for Mac图片素材管理工具

Eagle for Mac是专门为mac用户设计的一款非常专业的图片素材管理软件&#xff0c;支持藏网页图片&#xff0c;网页截屏&#xff0c;屏幕截图和标注&#xff0c;自动标签和筛选等功能&#xff0c;让设计师方便存储需要的素材和查找&#xff0c;提供工作效率。 使用 Eagle 强大的…

【ulimit 命令】LINUX单进程能够打开的最大文件句柄数

Linux系统如何查看修改最大打开文件数&#xff0c;这个问题对于很多刚刚学习linux的小伙伴来说觉得有点奇怪。Linux系统和windows不同之处在于更强的多任务多线程&#xff0c;由于文件系统结构的不同linux针对不同进程不同用户都可以设置最打打开文件数。 查看当前系统最大的文…

_数字矩阵

题目&#xff1a;一个3阶的数字矩阵如下&#xff1a; 1 2 3 8 9 4 7 6 5 现在给定数字n(1<n≤20)&#xff0c;输出n阶数字矩阵。 思路&#xff1a; 放出一条好玩的贪吃蛇&#xff0c;按照右下左上的顺序吃蛋糕&#xff0c;一边吃蛋糕&#xff0c;一边拉数字&#xff1b…

小区物业业主管理信息系统设计的设计与实现(论文+源码)_kaic

摘 要 随着互联网的发展&#xff0c;网络技术的发展变得极其重要&#xff0c;所以依靠计算机处理业务成为了一种社会普遍的现状。管理方式也自然而然的向着现代化技术方向而改变&#xff0c;所以纯人工管理方式在越来越完善的现代化管理技术的比较之下也就显得过于繁琐&#x…

在ubuntu上部署label-studio

1. 安装label-studio 由于服务器的默认python3版本太低&#xff0c;尝试了很多方法&#xff0c;没有升级。因此采用annaconda方式安装label-studio. a.安装anaconda: 参照如下链接&#xff0c;安装anaconda。 Ubuntu安装Anaconda详细步骤&#xff08;Ubuntu22.04.1&#xff…

IDEA对Web和Tomcat的一些配置

这里只是做了自己学习中的一点记录&#xff0c;仅供参考哈&#xff01; 配置Tomcat Modules新增Web 新增module后新增Artifacts 新增Artifacts后Tomcat新增布署 将指定的module由普通java项目变成web项目 直接创建布署到Tomcat时所需要的Aritifacts包 配置Servlet的依赖包 配置…

自然语言处理在智能客服和聊天机器人中的应用

文章目录 1. 引言2. NLP基础2.1 词法分析2.2 语法分析2.3 语义理解2.4 情感分析 3. 智能客服中的应用3.1 自动问答3.2 意图识别3.3 情感分析与情绪识别 4. 聊天机器人中的应用4.1 对话生成4.2 上下文理解 5. 技术原理与挑战5.1 语言模型5.2 数据质量和多样性5.3 上下文理解 6. …

4.4TCP半连接队列和全连接队列

目录 什么是 TCP 半连接队列和全连接队列&#xff1f; TCP 全连接队列溢出 如何知道应用程序的 TCP 全连接队列大小&#xff1f; 如何模拟 TCP 全连接队列溢出的场景&#xff1f; 全连接队列溢出会发生什么 ? 如何增大全连接队列呢 ? TCP 半连接队列溢出 如何查看 TC…

Docker安装并配置Pushgateway

Linux下安装Docker请参考&#xff1a;Linux安装Docker 简介 Pushgateway是Prometheus的一个组件&#xff0c;prometheus server默认是通过Exporter主动获取数据&#xff08;默认采取pull拉取数据&#xff09;&#xff0c;Pushgateway则是通过exporter主动方式推送数据到Pushg…

SSH报错-Terminal shell path: C:\WINDOWS\System32\cmd.exe 此时不应有

最近接盘了实验室的工作&#xff0c;需要重新配置连接自己的VScode的SSH远程连接服务器&#xff0c;结果配置了一个下午都没搞好&#xff0c;决定记录一下&#xff0c;希望大家避免踩坑。在vscode上遇到的是这个报错&#xff1a; 错误日志 [11:40:12.097] Checking ssh with …

猜数游戏-Rust版

cargo new guessing_game 创建项目 输入任意内容&#xff0c;并打印出来 main.rs: use std::io; // 像String这些类型都在预先导入的prelude里&#xff0c;如果要使用的不在prelude里&#xff0c;则需要显式导入fn main() { println!("猜数"); println!("…

C++动态库编程 | C++名称改编、标准C接口、extern “C”、函数调用约定以及def文件详解

目录 1、导入导出声明 2、C函数名称改编与extern "C" 3、函数调用约定与跨语言调用 3.1、函数调用约定 3.2、跨语言调用dll库接口 3.3、函数调用约定以哪个为准 4、def文件的使用 5、在C程序中引用ffmpeg库中的头文件链接报错问题 6、最后 VC常用功能开发汇…