hdu1195 Open the lock 双向广度优先搜索

在这里插入图片描述
D-BFS 双向广度优先搜索
从起点和终点同时开始搜索,直到两个搜索的点相交,得到最短路径
Code:

// D-BFS
//by:MuQY
#include <iostream>
#include <algorithm>
#include <string.h>
#include <queue>
#include <string>
using namespace std;
int stmap[10005]; // 标记每一个情况下走了几步
int vis[10005];   // 标记每个情况下有没有被访问过,是正向还是逆向
string s, e;
struct Node
{int num[4];int step;
};
queue<Node> q, p; // q从s开始,p从e开始
int get_Num(int c[])
{int tmp = 0;for (int i = 0; i < 4; i++){tmp *= 10;tmp += c[i];}return tmp;
}
void bfs()
{memset(vis, 0, sizeof(vis));memset(stmap, 0, sizeof(stmap));Node a, b;int tmp;while (!q.empty() || !p.empty()){if (!q.empty()){a = q.front();q.pop();for (int i = 0; i < 4; i++){b = a;b.num[i] = a.num[i] + 1;//+1if(b.num[i] == 10){b.num[i] = 1;}tmp = get_Num(b.num);if(vis[tmp] == 0){//没有出现过b.step = a.step + 1;stmap[tmp] = b.step;vis[tmp] = 1;q.push(b);}else if(vis[tmp] == 2){//有交点cout << a.step + stmap[tmp] + 1;return;}b.num[i] = a.num[i] - 1; //-1if(b.num[i] == 0){b.num[i] = 9;}tmp = get_Num(b.num);if (vis[tmp] == 0){ // 没有出现过b.step = a.step + 1;stmap[tmp] = b.step;vis[tmp] = 1;q.push(b);}else if (vis[tmp] == 2){ // 有交点cout << a.step + stmap[tmp] + 1 << endl;return;}}for (int i = 0; i < 3; i++){//交换相邻数字b = a;swap(b.num[i], b.num[i + 1]);tmp = get_Num(b.num);if(vis[tmp] == 0){b.step = a.step + 1;stmap[tmp] = b.step;vis[tmp] = 1;q.push(b);}else if(vis[tmp] == 2){cout << a.step + stmap[tmp] + 1 << endl;return;}}}if(!p.empty()){a = p.front();p.pop();for (int i = 0; i < 4; i++){b = a;b.num[i] = a.num[i] + 1; //+1if (b.num[i] == 10){b.num[i] = 1;}tmp = get_Num(b.num);if (vis[tmp] == 0){ // 没有出现过b.step = a.step + 1;stmap[tmp] = b.step;vis[tmp] = 2;p.push(b);}else if (vis[tmp] == 1){ // 有交点cout << a.step + stmap[tmp] + 1 << endl;return;}b.num[i] = a.num[i] - 1; //-1if (b.num[i] == 0){b.num[i] = 9;}tmp = get_Num(b.num);if (vis[tmp] == 0){ // 没有出现过b.step = a.step + 1;stmap[tmp] = b.step;vis[tmp] = 2;p.push(b);}else if (vis[tmp] == 1){ // 有交点cout << a.step + stmap[tmp] + 1 << endl;return;}}for (int i = 0; i < 3; i++){ // 交换相邻数字b = a;swap(b.num[i], b.num[i + 1]);tmp = get_Num(b.num);if (vis[tmp] == 0){b.step = a.step + 1;stmap[tmp] = b.step;vis[tmp] = 2;p.push(b);}else if (vis[tmp] == 1){cout << a.step + stmap[tmp] + 1 << endl;return;}}}}
}int main()
{int tcase;cin >> tcase;while (tcase--){while(!q.empty()){q.pop();}while(!p.empty()){p.pop();}Node ss, ee;int s_num, e_num;memset(stmap, 0, sizeof(stmap));memset(vis, 0, sizeof(vis));cin >> s >> e;for (int i = 0; i < 4; i++){ss.num[i] = s[i] - '0';ee.num[i] = e[i] - '0';}s_num = get_Num(ss.num);e_num = get_Num(ee.num);ss.step = 0;ee.step = 0;vis[s_num] = 1;vis[e_num] = 2;q.push(ss);p.push(ee);bfs();}return 0;
}

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

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

相关文章

【Vue2 + ElementUI】分页el-pagination 封装成公用组件

效果图 实现 &#xff08;1&#xff09;公共组件 <template><nav class"pagination-nav"><el-pagination class"page-area" size-change"handleSizeChange" current-change"handleCurrentChange":current-page"c…

TarGAN:多模态医学图像转换GAN

TarGAN 核心思想网络结构 核心思想 论文&#xff1a;https://arxiv.org/abs/2105.08993 代码&#xff1a;https://github.com/2165998/TarGAN 解决的问题&#xff1a;传统多模态医学图像转换通常&#xff0c;在生成高质量图像方面存在问题&#xff0c;特别是在关键目标区域或…

NC65中间件能启动,前端客户端启动失败,加载异常,卡住(org.owasp.esapi)

控制台输出错误 ESAPI.properties could not be loaded by any means. Fail.SecurityConfiguration class(org.owasp.esapi.reference.DefaultSecurityConfiguration) CTOR threw exception.效果图&#xff1a; 解决方案 添加如下参数&#xff1a; -Dorg.owasp.esapi.resou…

信创UOS

信创UOS 国产操作系统 文章目录 信创UOS前言一、信创UOS是什么二、信创UOS的特点与局限性1. 信创UOS的特点2. 信创UOS的局限性三、信创UOS常见故障总结前言 信创UOS(Union Operating System)是由中国软件与技术服务股份有限公司(CS&S)开发的一款操作系统。它是中国政府…

用k8s私有化部署docsify做开放API平台

文章目录 1、API开放平台2、实现思路3、用docsify实现4、一些坑坑1&#xff1a;nginx转发实现跳转坑2&#xff1a;点击跳转不能精准跳坑3&#xff1a;md文档页内跳转与跨文档跳转坑4&#xff1a;插件做目录的折叠收起坑5&#xff1a;统一目录 做完了一个API开放平台的需求&…

Higress 开源一周年:新版本,新标准,新工具,新征程

作者&#xff1a;Higress 团队 历程回顾 Higress 开源一年时间&#xff0c;一共发布了 18 个 release 版本&#xff0c;收获了 40 多位社区贡献者和 1800 star&#xff0c;上图是这一年过来达成的一些关键的里程碑。 前面半年通过集成开源生态&#xff0c;打磨开源版本稳定性…

文件操作---C++

文件操作目录 1.文本文件1.1写文件1.2读文件1.2.1第一种方式&#xff1a;流输入方式1.2.2第二种方式&#xff1a;getline成员函数1.2.3第三种方式&#xff1a;getline全局函数1.2.4第四种方式&#xff1a;按一个一个字符读取 2.二进制文件2.1写文件2.2读文件 程序运行时产生的数…

LabVIEW电缆检修系统

在电力系统中&#xff0c;合理选择电缆检修策略是保障电网稳定运行的关键。现有的电缆检修策略往往忽视了电缆的技术和经济双重指标&#xff0c;导致检修效率低下和维护成本高昂。为此&#xff0c;开发了一种基于风险评估模型和全寿命周期成本&#xff08;LCC&#xff09;的电缆…

【论文笔记】Learning Deconvolution Network for Semantic Segmentation

重要说明&#xff1a;严格来说&#xff0c;论文所指的反卷积并不是真正的 deconvolution network 。 关于 deconvolution network 的详细介绍&#xff0c;请参考另一篇博客&#xff1a;什么是Deconvolutional Network&#xff1f; 一、参考资料 Learning Deconvolution Netwo…

在IDEA中创建SpringBoot项目

概述 SpringBoot是由Pivotal团队提供的全新的框架&#xff0c;其设计的目的是用来简化Spring应用的初始搭建以及开发过程。 传统方式构建Spring应用程序 导入依赖繁琐 依赖冲突 项目配置繁琐 SpringBoot特性 1、起步依赖 本质上就行一个Maven坐标&#xff0c;整合了完成一…

【C++进阶】STL容器--list使用迭代器问题分析

目录 前言 1. list的基本使用 1.1 list构造函数 1.2 list迭代器 1.3 list capacity 1.4 list元素访问 1.5 list 修改操作 insert erase swap resize clear 2. list失效迭代器问题 3. list使用算法库函数问题 总结 前言 list&#xff08;链表&#xff09;在C中非常重要…

【创建vue项目的两种方式】

Vue环境搭建 NodeJs安装包安装淘宝镜像 环境搭建webpack安装全局安装vue/cli查看模板创建项目1.webpack2. vue-cli NodeJs安装包 下载链接&#xff1a;官网链接 下载下来后&#xff0c;直接傻瓜式的安装即可。 通过在cmd控制台输入以下命令查看是否安装成功 node -v因为适配某…

RK3399平台开发系列讲解(PCIE篇)PCIE体系结构有哪些知识

🚀返回专栏总目录 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、PCI/PCIe拓扑结构 PCI Express (PCIe) 拓扑结构是指 PCI Express 总线中各个设备之间的连接和通信方式。PCI Express 是一种高速串行总线标准,用于连接计算机内部的各种硬件设备,如图形卡、网络适配…

vue3---inputRef.value.focus()报错Cannot read properties of null (reading ‘focus‘)

问题描述&#xff1a;点击编辑按钮&#xff0c;出现el-input框&#xff08;el-input显示隐藏通过v-if控制&#xff09; <el-input ref"inputRef" v-if"isEdit" v-model"modelName" blur"isEdit false" /> <el-button text …

python小项目:口令保管箱

代码&#xff1a; #! python3 # python 编程-----口令保管箱passwords{emails: F7minlBDDuvMJuxESSKHFhTxFtjVB6,blog:VmALvQyKAxiVH5G8v01if1MLZF3sdt,luggage:12345,} import sys,pyperclip if len(sys.argv)<2:print(usage:python python3文件[accout]-copy accout pass…

shell 脚本4

循环语句 echo命令 1.标准输出 2.用来调整脚本里面的格式 echo -e \b 删除b前面的数字 echo -e \t &#xff08;横向制表符 横向tab键&#xff09; echo -e \c 删除c后面的字符&#xff0c;并且不换行 echo -e \n 换行 自动硬盘分区 新建一块磁盘/dev/sdb 可以…

循环测试之旅——深度解析Pytest插件 pytest-repeat

在软件开发中,测试的重要性不言而喻。而为了提高测试的鲁棒性和可靠性,Pytest插件 pytest-repeat 应运而生。这个插件可以帮助你轻松实现测试用例的循环运行,以更全面地评估代码的稳定性。本文将深入介绍 pytest-repeat 插件的基本用法和实际案例,助你更好地利用循环测试,…

chaper data writting

在大气科学领域的期刊论文中&#xff0c;这个章节应该清晰地说明数据的来源、获取方式、处理过程和分析方法&#xff0c;以便其他研究人员能够理解和验证研究结果。 示例结构 数据来源 描述数据的来源&#xff0c;包括观测、实验或模拟数据。说明数据的获取途径和原始数据集的…

Vue自定义成功弹窗H5实现类似于小程序的效果

效果图&#xff1a; <div class"father"><div class"success-box" v-if"isSuccess"><img src"../../assets/insure/success-logo.png" alt""><span>{{ successTitle }}</span></div> &…

安全防御第三次作业

作业&#xff1a;拓扑图及要求如下图 注&#xff1a;server1是ftp服务器&#xff0c;server2是http服务器 lsw1&#xff1a; 其中g0/0/0口为trunk 实现 1&#xff0c;生产区在工作时间内可以访问服务器区&#xff0c;仅可以访问http服务器 验证&#xff1a; 2&#xff0c;办公…