解决6栈6层码头集装箱堆栈翻箱最优解问题
‘’’
con 1
origin_stack = [
[4, 4, 1, 0, 0, 0], # 第一栈
[4, 3, 2, 1, 0, 0], # 第二栈
[4, 2, 2, 1, 0, 0], # 第三栈
[3, 3, 3, 1, 0, 0], # 第四栈
[3, 4, 2, 1, 0, 0], # 第五栈
[4, 2, 3, 2, 0, 0] # 第六栈
]
con 2
origin_stack = [
[4, 4, 3, 0, 0, 0], # 第一栈
[2, 2, 4, 1, 0, 0], # 第二栈
[4, 1, 3, 3, 0, 0], # 第三栈
[1, 4, 2, 1, 0, 0], # 第四栈
[4, 3, 4, 3, 2, 0], # 第五栈
[2, 2, 1, 1, 0, 0] # 第六栈
]
con 3
origin_stack = [
[4, 2, 2, 0, 0, 0], # 第一栈
[1, 1, 1, 0, 0, 0], # 第二栈
[4, 3, 3, 4, 2, 1], # 第三栈
[2, 2, 3, 0, 0, 0], # 第四栈
[2, 3, 4, 1, 0, 0], # 第五栈
[2, 3, 4, 3, 1, 0] # 第六栈
]
con 4
origin_stack = [
[2, 3, 4, 3, 2, 2], # 第一栈
[4, 4, 4, 0, 0, 0], # 第二栈
[2, 1, 1, 3, 0, 0], # 第三栈
[4, 1, 3, 0, 0, 0], # 第四栈
[1, 3, 2, 3, 2, 0], # 第五栈
[1, 1, 4, 0, 0, 0] # 第六栈
]
con 5
origin_stack = [
[3, 2, 1, 4, 0, 0], # 第一栈
[2, 1, 3, 4, 0, 0], # 第二栈
[1, 1, 2, 4, 1, 0], # 第三栈
[2, 1, 2, 0, 0, 0], # 第四栈
[3, 4, 0, 0, 0, 0], # 第五栈
[3, 3, 2, 4, 3, 4] # 第六栈
]
con 6
origin_stack = [
[3, 2, 3, 0, 0, 0], # 第一栈
[2, 1, 3, 4, 0, 0], # 第二栈
[1, 1, 2, 4, 1, 0], # 第三栈
[2, 1, 2, 0, 0, 0], # 第四栈
[3, 4, 0, 0, 0, 0], # 第五栈
[3, 3, 2, 4, 3, 4] # 第六栈
]
con 7
origin_stack = [
[3, 1, 4, 4, 1, 1], # 第一栈
[1, 3, 0, 0, 0, 0], # 第二栈
[2, 2, 4, 0, 0, 0], # 第三栈
[2, 1, 2, 4, 0, 0], # 第四栈
[4, 1, 2, 3, 3, 3], # 第五栈
[4, 3, 2, 0, 0, 0] # 第六栈
]
con 8
origin_stack = [
[3, 1, 1, 3, 0, 0], # 第一栈
[2, 3, 3, 4, 1, 0], # 第二栈
[2, 3, 1, 3, 3, 0], # 第三栈
[4, 4, 2, 0, 0, 0], # 第四栈
[2, 4, 4, 0, 0, 0], # 第五栈
[1, 2, 4, 1, 0, 0] # 第六栈
]
con 9
origin_stack = [
[2, 1, 4, 1, 0, 0], # 表第一栈
[4, 3, 1, 3, 3, 4], # 第二栈
[2, 3, 2, 0, 0, 0], # 第三栈
[1, 2, 4, 4, 3, 2], # 第四栈
[3, 4, 1, 0, 0, 0], # 第五栈
[2, 1, 0, 0, 0, 0] # 第六栈
]
con 10
origin_stack = [
[2, 1, 0, 0, 0, 0], # 第一栈
[4, 3, 1, 0, 0, 0], # 第二栈
[2, 2, 2, 2, 1, 1], # 第三栈
[1, 0, 0, 0, 0, 0], # 第四栈
[3, 3, 3, 3, 3, 2], # 第五栈
[4, 4, 4, 4, 4, 1] # 第六栈
]
‘’’
上面为初始堆栈状态10个
解决6栈6层码头集装箱堆栈翻箱最优解问题
问题描述
码头集装箱堆栈翻箱问题是一个经典的物流优化问题。在这个具体场景中,我们有6栈*6层的集装箱堆栈,需要重新排列这些集装箱,使得:
- 优先级高的集装箱(数字越小优先级越高)放在上层
- 同一优先级的集装箱尽量分布在不同的栈中
其中,每个数字代表一个集装箱的优先级,数字越小优先级越高,0表示该位置没有集装箱。
#需求
使用A*算法或其它算法寻找最优解
每次只能移动一个集装箱
优先级高的集装箱应放在上层
同一优先级的集装箱尽量分布在不同的栈
每一步需要打印堆栈状态
计算并输出算法执行的时间
下面是解答:
码头集装箱堆栈翻箱问题解决方案
我将使用A算法来解决这个6栈6层集装箱堆栈翻箱问题。A算法是一种启发式搜索算法,非常适合这种状态空间搜索问题。
解决方案代码
import heapq
import time
from copy import deepcopy
from typing import List, Tuple, Dict, Optionalclass ContainerStack:def __init__(self, stacks: List[List[int]]):self.stacks = stacksself.width = len(stacks)self.height = len(stacks[0]) if self.width > 0 else 0def __eq__(self, other):return self.stacks == other.stacksdef __hash__(self):return hash(tuple(tuple(stack) for stack in self.stacks))def __str__(self):return "\n".join([f"Stack {i+1}: {stack}" for i, stack in enumerate(self.stacks)])def is_valid_move(self, from_stack: int, to_stack: int) -> bool:# 检查移动是否有效if from_stack == to_stack:return Falseif not (0 <= from_stack < self.width and 0 <= to_stack < self.width):return False# 找到from_stack最上面的集装箱from_top_pos = -1for i in range(self.height):if self.stacks[from_stack][i] != 0:from_top_pos = ibreak# 如果from_stack为空if from_top_pos == -1:return False# 找到to_stack最上面的集装箱位置to_top_pos = -1for i in range(self.height):if self.stacks[to_stack][i] != 0:相关文章:
解决6栈6层码头集装箱堆栈翻箱最优解问题
‘’’ con 1 origin_stack = [ [4, 4, 1, 0, 0, 0], # 第一栈 [4, 3, 2, 1, 0, 0], # 第二栈 [4, 2, 2, 1, 0, 0], # 第三栈 [3, 3, 3, 1, 0, 0], # 第四栈 [3, 4, 2, 1, 0, 0], # 第五栈 [4, 2, 3, 2, 0, 0] # 第六栈 ] con 2 origin_stack = [ [4, 4, 3, 0, 0, 0], # 第一栈…...
flutter app实现分辨率自适应的图片资源加载
在 Flutter 中,为了实现分辨率自适应的图片资源加载,确实需要遵循特定的目录结构和命名规则。这种机制允许 AssetImage 根据设备的 设备像素比(Device Pixel Ratio, DPR) 自动选择最合适的图片资源。以下是详细的说明和实现步骤&a…...
软件测试之测试数据生成(Excel版)
这是Excel生成测试数据的函数使用 1.时间 1.1.时间 例生成2022-05-01之前一年内任意时间点: =TEXT("2022-05-01"-RAND()-RANDBETWEEN(1,365),"yyyy-mm-dd hh:mm:ss")1.2.年月日 yyyy-mm-dd 以当前时间生成10年的日期 =TEXT(NOW()-RAND()-RANDBETWE…...
(51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)
目录 演示视频: 源代码 main.c LCD1602.c LCD1602.h AT24C02.c AT24C02.h Key.c Key.h I2C.c I2C.h Delay.c Delay.h 代码解析与教程: Dealy模块 LCD1602模块 Key模块 I2C总线模块 AT24C02模块 /E2PROM模块 main模块 演示视频: &…...
STL简介 + string【上】
一 . STL简介 1.1 什么是STL STL(standard template libaray - 标准模板库) : 是C标准库的重要组成部分 , 不仅是一个可复用的组件库 , 而且是一个包罗 数据结构 与 算法 的软件框架 。 注意 : 是标准库的一部分 ÿ…...
【Bluedroid】A2DP Sink播放流程源码分析(二)
接上一篇继续分析:【Bluedroid】A2DP Sink播放流程源码分析(一)_安卓a2dp sink播放流程-CSDN博客 AVDTP接收端(Sink)流事件处理 bta_av_sink_data_cback 是 Bluedroid 中 A2DP Sink 角色的 AVDTP 数据回调函数,负责处理接收端的音频数据事件,将底层接收到的音频数据传递…...
redis利用备忘录
fofa: icon_hash"864611937" 防护: redis的安全设置:设置完毕,需要重加载配置文件启动redis 1.绑定内网ip地址进行访问 2. requirepass设置redis密码 3.保护模式开启protected-mode开启(默认开启) 4.最好把…...
SAP系统中MD01与MD02区别
知识点普及-MD01与MD02区别 1、从日常业务中,我们都容易知道MD01是运行全部物料,MD02是运行单个物料 2、在做配置测试中,也出现过MD02可以跑出物料,但是MD01跑不出的情况。 3、MD01与MD02的差异: 3.1、只要在物料主数…...
企业官网nodejs mySQL数据库安装及使用
以下是企业官网的MySQL数据库设计、本地安装指南,以及基于Node.js的增删改查(CRUD)实现方案: 一、MySQL数据库设计(企业官网基础表) 1. 核心表结构 -- 1. 用户表(管理员) CREATE T…...
Spring Boot自动配置原理深度解析:从条件注解到spring.factories
大家好!今天我们来深入探讨Spring Boot最神奇的特性之一——自动配置(Auto-configuration)。这个功能让Spring Boot如此受欢迎,因为它大大简化了我们的开发工作。让我们一起来揭开它的神秘面纱吧!👀 🌟 什么是自动配置…...
ubuntu学习day3
3 编译与调试 3.1 gcc/g编译器 当我们进行编译的时候,要使用一系列的工具,我们称之为工具链。SDK就是编译工具链的简写,我们所使用的是gcc系列编译工具链。使用-v参数来查看gcc的版本,从而确定某些语法特性是否可用,…...
C++数据结构与二叉树详解
前言: 在C编程的世界里,数据结构是构建高效程序的基石,而二叉树则是其中最优雅且应用广泛的数据结构之一。本文将带你深入理解二叉树的本质、实现与应用,助你在算法设计中游刃有余。 一、二叉树的基本概念 1. 什么是二叉树 二叉树…...
论文阅读:2023 arxiv Safe RLHF: Safe Reinforcement Learning from Human Feedback
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Safe RLHF: Safe Reinforcement Learning from Human Feedback https://arxiv.org/pdf/2310.12773 https://github.com/PKU-Alignment/safe-rlhf 速览 研究动机ÿ…...
C++11中的std::condition_variable
一、什么是条件变量? std::condition_variable 是C11标准库中提供的线程同步工具,用于在多线程环境中实现“等待-通知”机制。它的核心作用是让线程能够高效地等待某个条件成立,避免“忙等待”对CPU资源的浪费。 条件变量必须与std::mutex配…...
6.8.最小生成树
一.复习: 1.生成树: 对于一个连通的无向图,假设图中有n个顶点,如果能找到一个符合以下要求的子图: 子图中包含图中所有的顶点,同时各个顶点保持连通, 而且子图的边的数量只有n-1条࿰…...
QT中栅格模式探索
1、Qt中选择了栅格模式,如下图所示: 2、在进行整个大的UI界面布局时,需了解每个控件所需要选择的属性sizePolicy。 sizePolicy包含如下几种选择: 3、举个例子:此时整个UI界面,我采用了栅格模式…...
SLAM | 激光SLAM中的退化问题
在激光SLAM中,判断退化环境的核心是通过数学建模分析环境特征对位姿估计的约束能力。除了LOAM中提出的退化因子D外,还存在多种基于表达式和阈值设定的方法。以下是几种典型方法及其实现原理: 1. 协方差矩阵特征值分析 原理:通过分析点云协方差矩阵的特征值分布,判断环境中…...
C++入门基础:命名空间,缺省参数,函数重载,输入输出
命名空间: C语言是基于C语言的,融入了面向对象编程思想,有了很多有用的库,所以接下来我们将学习C如何优化C语言的不足的。 在C/C语言实践中,在全局作用域中变量,函数,类会有很多,这…...
tomcat 的安装与启动
文章目录 tomcat 服务器安装启动本地Tomcat服务器 tomcat 服务器安装 https://tomcat.apache.org/下载 Tomcat 10.0.X 启动本地Tomcat服务器 进入 Tomcat 的 bin...
C 语言中经典的数据结构
在 C 语言中,经典的数据结构通常包括以下几种,每种都有其特定的应用场景和实现方式: 1. 数组(Array) 定义:连续内存空间存储相同类型的数据。 特点:随机访问快(O(1))&am…...
算法-堆+单调栈
堆 首先堆在我们的Java中我们的是一个优先队列类 PriorityQueue 然后我们要弄最大堆和最小堆 最大堆: PriorityQueue<Integer> pq new PriorityQueue<Integer>((a, b) -> b - a); 最小堆: PriorityQueue<Integer> pq new P…...
物联网平台管理系统
物联网平台管理系统概述 物联网平台管理系统是物联网架构中的核心枢纽,承担着承上启下的关键作用。它向下连接各类物联网设备,实现设备的接入、管理与控制;向上为应用开发提供统一的数据接口和共性模块工具,支撑起各种丰富多彩的…...
STM32CubeMX-H7-15-SPI通信协议读写W25Q64
前言 SPI(Serial Peripheral Interface)通信协议是一种高速、全双工、同步的串行通信协议 本篇文章就使用W25Q64模块来学习SPI,包括软件SPI代码的编写,硬件SPI,中断SPI和DMASPI SPI的应用场景和模块 !这里是抄AI的&a…...
【软考】论devops在企业信息系统开发中的应用
摘要: 随着互联网的不断发展,各行各业都在建设自己的企业信息系统,而随着业务的不断升级和复杂化,系统的更新迭代速度越来越快,系统也越来越复杂。对于信息系统开发者,架构师,管理者,…...
生物化学笔记:医学免疫学原理22 肿瘤及肿瘤治疗
肿瘤及肿瘤治疗 免疫疗法 CAR-T细胞介绍...
JVM考古现场(二十二):降维打击·用二向箔优化内存模型
"警报!三维堆内存正在经历二维化坍缩!" 我腰间的玄铁令突然震动,在蜀山剑派的量子剑阵中投射出诡异的曼德博分形——这是三体文明发动降维打击的铁证! 楔子:二向箔奇点降临 昆仑镜监控日志: // …...
第三阶段面试题
Nginx nginx常用模块以及其功能 proxy模块,进行代理功能 ssl模块,进行HTTPS协议的使用 gzip模块,进行传输数据的压缩 upstream模块,进行反向代理时使用 static模块,静态资源进行访问的模块 cache模块࿰…...
操作系统-PV
🧠 背景:为什么会有 PV? 类比:内存(生产者) 和 CPU(消费者) 内存 / IO / 磁盘 / 网络下载 → 不断“生产数据” 例如:读取文件、下载视频、从数据库加载信息 CPU → 负…...
nuxt3路由切换页面出不来,刷新可以
nuxt3遇到一个奇怪的现象: 不管是router.push()跳转还是navigateTo()跳转,浏览器url变了,但是页面是空白的,没加载出来,刷新之后页面正常。 解决方案: <template>下的所有内容必须套在一个div里面...
Spring Boot配置文件优先级全解析:如何优雅覆盖默认配置?
📚 一、为什么需要了解配置文件优先级? 想象一下,你正在玩一个游戏🎮,游戏里有默认设置,但你可以通过不同的方式修改这些设置: 游戏内置的默认设置(就像Spring Boot的默认配置&…...
