汉诺塔问题

简介: 如果index还在From上,说明第一大步没走完第一步:1~i-1 从from到other第二步:i从from到to第三步:1~i-1从other到to把每一步都用递归分解最后相加,得出为第几步

文章目录

前言

解题思路

代码

前言

给定一个数组arr,长度为N,arr中的值只有1,2,3三种

arr[i] == 1,代表汉诺塔问题中,从上往下第i个圆盘目前在左

arr[i] == 2,代表汉诺塔问题中,从上往下第i个圆盘目前在中

arr[i] == 3,代表汉诺塔问题中,从上往下第i个圆盘目前在右

那么arr整体就代表汉诺塔游戏过程中的一个状况

如果这个状况不是汉诺塔最优解运动过程中的状况,返回-1

如果这个状况是汉诺塔最优解运动过程中的状况,返回它是第几个状况


解题思路



7层汉诺塔问题的一个状态


最优解的第一个状态

全部盘子都在左边


第二个状态就是1号盘子在右边

第三个状态就是2号盘子在中间



i: 1~i的圆盘需要移动

F: 1~i的圆盘现在处在什么圆盘上,可能是左中右.

t:需要去的位置可能是左,中,右

other:除了from, to的另外一个位置



i层的圆盘没有任何道理是在other.上



如果index还在From上,说明第一大步没走完

第一步:1~i-1 从from到other

第二步:i从from到to

第三步:1~i-1从other到to


把每一步都用递归分解

最后相加,得出为第几步


代码

public static int kth(int[] arr) {

 int N = arr.length;

 return step(arr, N - 1, 1, 3, 2);

}


// 0...index这些圆盘,arr[0..index] index+1层塔

// 在哪?from 去哪?to 另一个是啥?other

// arr[0..index]这些状态,是index+1层汉诺塔问题的,最优解第几步

public static int step(int[] arr, int index, int from, int to, int other) {

 if (index == -1) {

  return 0;

 }

 if (arr[index] == other) {

  return -1;

 }

 // arr[index] == from arr[index] == to;

 if (arr[index] == from) {

  return step(arr, index - 1, from, other, to);

 } else {

  int p1 = (1 << index) - 1;

  int p2 = 1;

  int p3 = step(arr, index - 1, other, to, from);

  if (p3 == -1) {

   return -1;

  }

  return p1 + p2 + p3;

 }

}


目录
相关文章
|
数据采集 开发者
如何编写有效的爬虫代码来避免网站的反爬虫机制?
如何编写有效的爬虫代码来避免网站的反爬虫机制?
494 1
|
网络协议 Java 测试技术
性能工具之常见流量复制工具
我们把用户访问系统造成的数据传输定义为流量,那么在用户访问系统的过程中,我们可以把进入和流出的数据复制下来,进行保存,待后续使用,即离线模式,或者转发到一个新的服务器,立即使用,即在线模式。
972 2
性能工具之常见流量复制工具
|
10月前
|
消息中间件 人工智能 API
100行代码讲透MCP原理
本文通过100行代码看到MCP的核心原理并不复杂,但它的设计巧妙深入理解使我们能够超越简单的SDK使用,创建更强大、更灵活的AI应用集成方案。
1970 61
100行代码讲透MCP原理
|
XML JSON API
如何使用Python将字典转换为XML
本文介绍了如何使用Python中的`xml.etree.ElementTree`库将字典数据结构转换为XML格式。通过定义递归函数处理字典到XML元素的转换,生成符合标准的XML文档,适用于与旧系统交互或需支持复杂文档结构的场景。示例代码展示了将一个简单字典转换为XML的具体实现过程。
293 1
|
Java Apache Spring
Java发送Http请求(HttpClient)
Java发送Http请求(HttpClient)
13174 2
|
机器学习/深度学习 数据可视化 PyTorch
使用Python实现深度学习模型:自动编码器(Autoencoder)
使用Python实现深度学习模型:自动编码器(Autoencoder)
893 0
|
测试技术 Linux
linux 服务器运行jmeter 进行服务性能压测
linux 服务器运行jmeter 进行服务性能压测
1597 0
|
网络协议 网络虚拟化
局域网游戏联机原理解析
局域网游戏联机原理解析
1035 1
|
JavaScript
jQuery -第3次课-DOM操作元素属性-样式等-附资料、作业
jQuery -第3次课-DOM操作元素属性-样式等-附资料、作业
163 0