c++最小步数模型(魔板)
C++ 最小步数模型通常用于寻找两个点之间的最短路径或最少步数。以下是一个基本的 C++ 最小步数模型的示例代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
vector<int> G[N];
int d[N];
bool vis[N];void bfs(int s) {queue<int> que;que.push(s);vis[s] = true;while (!que.empty()) {int x = que.front();que.pop();for (auto y : G[x]) {if (!vis[y]) {que.push(y);vis[y] = true;d[y] = d[x] + 1;}}}
}int main() {int n, m;cin >> n >> m;for (int i = 1; i <= m; i++) {int x, y;cin >> x >> y;G[x].push_back(y);G[y].push_back(x);}bfs(1);cout << d[n] << endl;return 0;
}
在这个例子中,我们使用了广度优先搜索算法(BFS)来遍历整个图,并计算每个点到起点的最短距离。具体地,我们将起点加入队列中,并在之后的每个循环中依次访问队列中的每个点。对于每个访问过的点,我们遍历与其相邻的所有节点,并在遇到未访问过的节点时将其加入队列,并更新其距离,即 d[y] = d[x] + 1。最后,我们输出终点 n 到起点的最短距离 d[n]。
注意,我们还需要使用一个数组 vis 来记录每个节点是否已经被访问过。在每次遍历时,我们需要先检查当前节点是否已经被访问过,如果访问过则跳过,否则将其标记为已访问,并处理其相邻节点。
先看题目:
Rubik 先生在发明了风靡全球的魔方之后,又发明了它的二维版本——魔板。
这是一张有 8 个大小相同的格子的魔板:
1 2 3 4
8 7 6 5
我们知道魔板的每一个方格都有一种颜色。
这 8 种颜色用前 8 个正整数来表示。
可以用颜色的序列来表示一种魔板状态,规定从魔板的左上角开始,沿顺时针方向依次取出整数,构成一个颜色序列。
对于上图的魔板状态,我们用序列 (1,2,3,4,5,6,7,8)来表示,这是基本状态。
这里提供三种基本操作,分别用大写字母 A,B,C 来表示(可以通过这些操作改变魔板的状态):
A:交换上下两行;
B:将最右边的一列插入到最左边;
C:魔板中央对的4个数作顺时针旋转。
下面是对基本状态进行操作的示范:
A:
8 7 6 5
1 2 3 4
B:
4 1 2 3
5 8 7 6
C:
1 7 2 4
8 6 3 5
对于每种可能的状态,这三种基本操作都可以使用。
你要编程计算用最少的基本操作完成基本状态到特殊状态的转换,输出基本操作序列。
注意:数据保证一定有解。
输入格式
输入仅一行,包括 88 个整数,用空格分开,表示目标状态。
输出格式
输出文件的第一行包括一个整数,表示最短操作序列的长度。
如果操作序列的长度大于0,则在第二行输出字典序最小的操作序列。
数据范围
输入数据中的所有数字均为 11 到 88 之间的整数。
输入样例:
2 6 8 4 5 7 3 1
输出样例:
7
BCABCCB
先看代码
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<queue>using namespace std;unordered_map<string, pair<string, char>> pre; // pre存的是当前状态所对应的上一状态的状态和操作inline string operA(string str)
{for (int i = 0; i < 4; ++ i) swap(str[i], str[7 - i]);return str;
}inline string operB(string str)
{for (int i = 0; i < 3; ++ i) swap(str[2 - i], str[3 - i]), swap(str[4 + i], str[5 + i]);return str;
}inline string operC(string str)
{swap(str[1], str[2]), swap(str[5], str[6]), swap(str[1], str[5]);return str;
}void bfs(string start, string end)
{queue<string> que;que.push(start); // 必须从start向end搜索才能保证字典序最小while (!que.empty()) {string str = que.front();que.pop();if (str == end) return;string move[3]; // 记录下该状态可由三种操作所达到的新状态move[0] = operA(str), move[1] = operB(str), move[2] = operC(str);for (int i = 0; i < 3; ++ i) // 遍历三种状态{ if (!pre.count(move[i])) // 如果当前状态还没有被记录过{ que.push(move[i]); // 将当前状态入队pre[move[i]] = make_pair(str, 'A' + i); // 存下当前状态所对应的上一状态的状态和操作}}}
}signed main()
{int x;string start = "12345678", end, res;for (int i = 0; i < 8; ++ i) {scanf("%d", &x);end += char(x + '0');}bfs(start, end);while (end != start) { // 从最终状态向起始状态回溯res = pre[end].second + res; // 注意要把前一个操作放在输出序的前面end = pre[end].first;}if (res.length() == 0) printf("0");else printf("%d\n%s", res.length(), res.c_str());return 0;
}相关文章:
c++最小步数模型(魔板)
C 最小步数模型通常用于寻找两个点之间的最短路径或最少步数。以下是一个基本的 C 最小步数模型的示例代码: #include<bits/stdc.h> using namespace std; const int N 1e5 5; vector<int> G[N]; int d[N]; bool vis[N];void bfs(int s) {queue<i…...
【每日一题Day337】LC460LFU 缓存 | 双链表+哈希表
LFU 缓存【LC460】 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键 key 存在于缓存中,则获取键的值&#x…...
解决老版本Oracle VirtualBox 此应用无法在此设备上运行问题
问题现象 安装华为eNSP模拟器的时候,对应的Oracle VirtualBox-5.2.26安装的时候提示兼容性问题,无法进行安装,具体版本信息如下: 软件对应版本备注Windows 11专业工作站版22H222621eNSP1.3.00.100 V100R003C00 SPC100终结正式版…...
法规标准-UN R48标准解读
UN R48是做什么的? UN R48全名为关于安装照明和灯光标志装置的车辆认证的统一规定,主要描述了对各类灯具的布置要求及性能要求;其中涉及自动驾驶功能的仅有6.25章节【后方碰撞预警信号】,因此本文仅对此章节进行解读 功能要求 …...
自动化和数字化在 ERP 系统中意味着什么?
毋庸置疑,ERP系统的作用是让工作更轻松。它可以集成流程,提供关键分析,确保你的企业高效运营。这些信息可以提高你的运营效率,并将有限的人力资本重新部署到更有效、更重要的需求上。事实上,自动化和数字化是ERP系统最…...
python nvidia 显卡信息 格式数据
python nvidia 显卡信息 格式数据. def get_gpu_memory():result subprocess.check_output([nvidia-smi, --query-gpupci.bus_id,memory.used,memory.total,memory.free, --formatcsv])# 返回 GPU 的显存使用情况,单位为 Minfo []for t in csv.DictReader(result…...
LeetCode每日一题:1993. 树上的操作(2023.9.23 C++)
目录 1993. 树上的操作 题目描述: 实现代码与解析: 模拟 dfs 原理思路: 1993. 树上的操作 题目描述: 给你一棵 n 个节点的树,编号从 0 到 n - 1 ,以父节点数组 parent 的形式给出,其中 p…...
绿色计算产业发展白皮书:2022年OceanBase助力蚂蚁集团减排4392tCO2e
9 月 15 日,绿色计算产业联盟在 2023 世界计算大会期间重磅发布了《绿色计算产业发展白皮书(2023 版)》。蚂蚁集团作为指导单位之一,联合参与了该白皮书的撰写。 白皮书中指出,落实“双碳”战略,绿色计算已…...
阿里云通义千问14B模型开源!性能超越Llama2等同等尺寸模型
9月25日,阿里云开源通义千问140亿参数模型Qwen-14B及其对话模型Qwen-14B-Chat,免费可商用。Qwen-14B在多个权威评测中超越同等规模模型,部分指标甚至接近Llama2-70B。阿里云此前开源了70亿参数模型Qwen-7B等,一个多月下载量破100万࿰…...
两横一纵 | 寅家科技发布10年新征程战略
2023年9月22日,寅家科技“寅路向前”10年新征程战略发布会在上海举办,来自投资领域的东方富海、深创投、高新投等知名投资机构,一汽大众、一汽红旗、奇瑞汽车等主机厂,国家新能源汽车技术创新中心、梅克朗、芯驰科技、思特威等合作…...
二值贝叶斯滤波计算4d毫米波聚类目标动静属性
机器人学中有些问题是二值问题,对于这种二值问题的概率评估问题可以用二值贝叶斯滤波器binary Bayes filter来解决的。比如机器人前方有一个门,机器人想判断这个门是开是关。这个二值状态是固定的,并不会随着测量数据变量的改变而改变。就像门…...
【刷题笔记9.25】LeetCode:相交链表
LeetCode:相交链表 一、题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 二、分析及代码 方法一:使用哈希Set集合 (注意…...
打造本地紧密链接的开源社区——KCC@长沙开源读书会openKylin爱好者沙龙圆满举办...
2023年9月9日,由开源社联合 openKylin 社区举办的 KCC长沙开源读书会&openKylin 爱好者沙龙,在长沙圆满举办。这是 KCC长沙首次正式进入公众视野,开展开源交流活动,也是 openKylin 社区长沙首场线下沙龙。长沙地区及其周边的众…...
Python 笔记03(多线程)
一 打开命令行,查看本机IP windows r 命令行输入:cmd ipconfig 然后查看IPv4的地址:192.168.1*6.1 ipconfig 二 函数式多进程 from multiprocessing import Process import os, timedef func(name):print(进程的ID:, os.g…...
mysql-4:SQL的解析顺序
SQL语句的解析顺序 文章目录 SQL语句的解析顺序编写顺序与解析顺序解析顺序关键字FROMONOUTER JOINWHEREGROUP BYHAVINGSELECTDISTINCTORDER BYLIMIT 解析流程流程分析流程说明WHERE条件解析顺序 编写顺序与解析顺序 编写顺序 SELECT DISTINCT < select_list > FROM &l…...
如何通过优化Read-Retry机制降低SSD读延迟?
近日,小编发现发表于2021论文中,有关于优化Read-Retry机制降低SSD读延迟的研究,小编这里给大家分享一下这篇论文的核心的思路,感兴趣的同学可以,可以在【存储随笔】VX公号后台回复“Optimizing Read-Retry”获取下载链接。 本文中主要基于Charge Trap NAND架构分析。NAND基…...
matlab自动生成FPGA rom源码
1 matlab 源码 close all clear all clci=0:1:(300000-100-1); x=300000./(100+i); x=x./2; x=round(...
消息队列(RabbitMQ+RocketMQ+Kafka)
消息队列是一种应用程序之间通过异步通信进行数据交换的通信模式 消息队列的类型: 点对点,一对一的消息传递模型,其中每个消息只能被一个接收者消费。发送者将消息发送到队列中,而接收者从队列中获取消息并进行处理,…...
python判断语句
1.布尔类型 进行判断,只有是(True:本质上是一个数字,记作1)和否(False:本质上是一个数字,记作0)。 定义变量存储布尔类型数据: 变量名称 布尔类型字面量 a True代码演示: a True print(type(a))输出结…...
C# 虚方法
在C#中,虚方法(virtual methods)是一种允许派生类(子类)覆盖(重写)基类(父类)中的方法的技术。虚方法的定义和使用如下: 基类中定义虚方法: pub…...
2009-2024年日本人口统计数据
本数据集为日本多层级行政区划的人口统计数据,涵盖都道府县、城市以及政令指定都市的市区三级空间单元,记录了人口规模、结构及动态变化等核心指标。数据可用于人口演变分析、区域发展研究及空间计量模型构建。基于此数据集,可系统开展以下研…...
【无人机三维路径规划】基于遗传算法GA实现复杂山地环境下无人机三维路径规划研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Armv9内存拷贝指令优化与性能调优
1. Arm架构内存拷贝指令深度解析在Armv9架构中,内存拷贝操作通过FEAT_MOPS(Memory Operations)特性得到显著增强。这套指令集专为高效内存操作设计,其中CPYFP/CPYFM/CPYFE系列指令实现了分阶段的内存拷贝机制。与传统的循环拷贝相比,这种设计…...
(最新版)GitGitHub实操图文详解教程(05)—git init命令
版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 1. 应用场景 git init 用于将一个普通目录初始化为 Git 仓库,从而使 Git 开始对该目录及其文件进行版本管理。 在实际开发中,常见应用场景包括: 新建本地项目 当你创建一个 Spring Boot 项目…...
神经网络分子动力学与长程静电相互作用优化技术
1. 神经网络分子动力学与长程静电相互作用优化概述分子动力学模拟作为计算化学和材料科学的核心工具,其精度和效率直接决定了研究的深度和广度。传统分子动力学依赖经验力场,虽然计算速度快,但难以准确描述化学键断裂/形成等过程。而基于量子…...
在不确定的命题环境中,如何建立稳定的考研数学备考体系
近两年,考研数学始终是考研备考中讨论度较高的科目。每年考试结束后,关于试卷难度、题型变化、计算量以及复习节奏的讨论都会迅速升温。对考生而言,真正需要关注的并不只是某一年试题“偏难”还是“偏易”,而是在变化之中建立一套…...
HYCONTROL MICROFLEX-DB超声波液位计实操详解(参数+工况+故障排查)
在工业液位测量中,腐蚀性介质、罐内干扰、泡沫水汽、后期维护量大一直是现场普遍痛点,很多中小型储罐、水池、反应罐都会纠结性价比高、调试简单、稳定性强的超声波液位计。今天给大家详细拆解一款进口紧凑型液位变送器:英国HYCONTROL海康MIC…...
7B秒杀70B!大模型微调秘籍全解:从理论到实战,玩转高效适配!
本文系统介绍了大模型微调的理论框架与实践流程。阐述了微调的必要性,即弥补通用大模型在领域知识、输出格式及行为对齐上的不足,并说明微调效果可超越更大参数的未微调模型。文章深入解析了微调原理,对比了全参数微调与高效微调(…...
别再只会用阿里云加速了!手把手教你配置Docker daemon.json,优化日志与存储路径
深度优化Docker生产环境:daemon.json高阶配置实战指南 当Docker从开发测试环境走向生产部署时,默认配置往往成为性能瓶颈和系统隐患的源头。许多团队在遭遇磁盘爆满、日志失控或网络拥塞后,才意识到基础镜像加速只是Docker调优的冰山一角。本…...
DeepSeek总结的CloudNativePG 与 Crunchy PGO:一个诚实且带有主观见解的比较
来源:https://www.gabrielebartolini.it/articles/2026/05/cloudnativepg-and-crunchy-pgo-an-honest-opinionated-comparison/ CloudNativePG 与 Crunchy PGO:一个诚实且带有主观见解的比较 作者: Gabriele Bartolini 日期: 2026年5月18日 目录 Crunchy…...
