题目传送门

密码锁

时间限制 : 10000 MS

空间限制 : 65536 KB


问题描述

何老板的密码锁由四位数字组成,每个数字的范围在1到9之间。
现在何老板告诉你开锁的密码,问,你最少需要多少步才能打开锁。

每一步,你可以进行下列三种操作:
1.向上转动密码盘,使一个数字加1(数字9再加1会变为1);
2.向下转动密码盘,使一个数字减1(数字1再减1会变为9);
3.交换两个相邻的数字(交换相邻两个密码盘,比如数字1357,交换左起第一和第二个密码盘后,得到3157)

输入格式

第一行,4个数字,表示锁当前的状态
第二行,4个数字,表示开锁的密码

输出格式

一个整数,表示打开锁需要的最少步数

样例输入

1 2 3 4
2 1 4 4

样例输出

2


思路:

这道题典型的BFS模板

没啥说的,上代码!

void bfs()
{node now = first;now.num_of_step = 0;vis[now.a[0]][now.a[1]][now.a[2]][now.a[3]] = true;q.push(now);node next;while(!q.empty()){now = q.front();q.pop();if(now.a[0]==last.a[0]&&now.a[1]==last.a[1]&&now.a[2]==last.a[2]&&now.a[3]==last.a[3]){printf("%d",now.num_of_step);return;}else{for(int i=0; i<4; i++){next = now;next.a[i] ++;if(next.a[i] == 10)next.a[i] = 1;if(!vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]]){vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]] = true;next.num_of_step ++;q.push(next);}}for(int i=0; i<4; i++){next = now;next.a[i] --;if(next.a[i] == 0)next.a[i] = 9;if(!vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]]){vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]] = true;next.num_of_step ++;q.push(next);}}for(int i = 0; i < 3; i++){next = now;swap(next.a[i],next.a[i+1]);if(!vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]]){vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]] = true;next.num_of_step++;q.push(next);}}}}
}

AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,m;
int ans;
struct node
{int a[4];int num_of_step;
};
queue<node> q;
node first,last;
bool vis[11][11][11][11];
void in_it()
{for(int i=0; i<4; i++)scanf("%d",&first.a[i]);for(int i=0; i<4; i++)scanf("%d",&last.a[i]);
}
void find()
{node now = first;now.num_of_step = 0;vis[now.a[0]][now.a[1]][now.a[2]][now.a[3]] = true;q.push(now);node next;while(!q.empty()){now = q.front();q.pop();if(now.a[0]==last.a[0]&&now.a[1]==last.a[1]&&now.a[2]==last.a[2]&&now.a[3]==last.a[3]){printf("%d",now.num_of_step);return;}else{for(int i=0; i<4; i++){next = now;next.a[i] ++;if(next.a[i] == 10)next.a[i] = 1;if(!vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]]){vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]] = true;next.num_of_step ++;q.push(next);}}for(int i=0; i<4; i++){next = now;next.a[i] --;if(next.a[i] == 0)next.a[i] = 9;if(!vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]]){vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]] = true;next.num_of_step ++;q.push(next);}}for(int i = 0; i < 3; i++){next = now;swap(next.a[i],next.a[i+1]);if(!vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]]){vis[next.a[0]][next.a[1]][next.a[2]][next.a[3]] = true;next.num_of_step++;q.push(next);}}}}
}
int main()
{in_it();find();return 0;
}

AC记录


The end

最后:制作不易,点个赞吧,求求了

NKOJ P3631 密码锁相关推荐

  1. 基于fpga的数码管动态扫描电路设计_【至简设计案例系列】基于FPGA的密码锁设计(altera版)...

    秦红凯 明德扬FPGA科教 一.项目背景概述 随着生活质量的不断提高,加强家庭防盗安全变得非常重要,但传统机械锁的构造过于简单,很容易被打开,从而降低了安全性.数字密码锁因为它的保密性很高,安全系数也 ...

  2. iphone相册怎么加密_iphone相册加密码锁,保护隐私

    在以往很多使用iphone的小伙伴都会遇到一个难题,在不越狱的情况下进行给相册进行设置密码锁,这是一个无法完成的目标,在前几期也为大家分享了相册照片加密方法,但是用起来很是不方便,今天就为大家分享利用 ...

  3. 妙用终截者密码锁防***注入Explorer

    俗话说得好:"知已知彼,百战不殆".这句话,不仅常用到军事战争中, 同样的,在网络这块没有硝烟的战场上,***也自成一套. 不清楚***方式,怎么能更好的防御?在接下来的介绍中,我 ...

  4. 哪个牌子的平板电脑好_中山密码锁哪个牌子好

    中山密码锁哪个牌子好双面防水庭院锁对于材质的选择,看其外观颜色,纯铜制成的锁具一般都经过抛光和磨砂处理,与镀铜相比,色泽要暗,但很自然.同时双面防水庭院锁手感较重,而双面防水庭院锁明显较轻.而且双面防 ...

  5. 鼠标跟随flash代码_FLASH如何制作密码锁功能(AS3)

    不管是电影还是电视中,都会经常有密码锁功能,就是按几个数字键,打开保险箱或门,在这里我们制作一个按正确密码打开门的效果. 主要知识点:数组使用,鼠标事件. 工具/原料:FLASH CS3及以上版本软件 ...

  6. 基于C语言STC89C52单片机电子密码锁的设计与仿真

    arm实现较为简单, 功能较为完善, 因此使用单片机控制较多. 显示器少数用数码管. 而本文所介绍的电子密码锁使用移植性及可读性强的高级语言C语言编写, 使用更加方便. 从经济适用的角度出发, 采用S ...

  7. hrbust 1616 密码锁(广搜)

    分析:广搜,每个四位数作为一个状态,从每个状态扩展出其他的几种状态并累加步数之后加入队列. 1 #include <stdio.h> 2 #include <string.h> ...

  8. 云丁密码锁使用说明书_郑州智能密码锁多少钱,放心省心

    首页 > 新闻中心 发布时间:2020-11-12 19:51:44 导读:多麦克斯智能科技为您提供郑州智能密码锁多少钱的相关知识与详情: 门锁时钟是否准确将会直接影响有关钥匙卡的使用,因此,要 ...

  9. 7-5 密码锁 (10 分)

    7-5 密码锁 (10 分) 在神秘的乌啦啦国度有一个非常神秘的基地,多年来,小明家族一直在为前往神秘基地而努力着.终于在历经数千年的探索之后,他们来到了神秘基地的大门口. 现在他们站在入口处,但要进 ...

最新文章

  1. c++ 单例模式_Java面试题总结之设计模式、网络基础、常用算法
  2. 黑马程序员-------------(十)Java基础知识加强(一)
  3. char[]:strlen和sizeof的区别
  4. jQuery学习(九)—常用的包裹方法
  5. 洛谷P3402 【模板】可持久化并查集
  6. 我的天!你竟然不会用IDEA远程调试Tomcat...
  7. MySQL—一个单引号引发的MYSQL性能损失
  8. python中循环语句有哪几种_Python的循环语句
  9. 主机不可达和端口不可达
  10. 通用商品后端管理系统
  11. 跟着莫烦python 从零开始强化学习之Q-Learning 一维探索者 代码完整注释版
  12. 盈建科中地震波_SIMQKE_GR、SeismoSignal、中国建筑抗震设计规范反应谱v1.0----时程分析地震波生成及分析必备软件...
  13. 从Waterfall到Bidding,开发者离Open Bidding还有多远
  14. iOS 极光推送没有声音怎么办?
  15. 混合App WebView自动化测试
  16. 退耦电容原理--退藕电容的一般配置原则
  17. java热敏打印机_用java在POS热敏打印机上打印PDF或PNG
  18. 详解Wi-Fi连接上网认证接入的原理和过程
  19. Uncaught TypeError: Cannot read properties of undefined (reading ‘push’) ---- vue-router报错
  20. CVPR2022——Not All Points Are Equal : IA-SSD

热门文章

  1. 分析计算机测色配色不准确的原因,实用技术∣如何有效利用电脑测色配色
  2. 基于python opencv mediapape 实现的虚拟计算器
  3. 转载 SharePoint开发部署WSP解决方案包
  4. tensorflow变量共享——VariableScope的reuse模式、tf.get_variable()、tf.Variable() 探索
  5. 二阶差分(注意数据范围)
  6. 基于Django的个人博客系统开发
  7. 项目总结 -网页聊天室
  8. Mc1.16forge官混教程/教补-#4 为物品赋予常用属性
  9. html图片中加入js,javascript如何添加图片?
  10. MSF-EternalBlue