题目传送门

密码锁

时间限制 : 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. Win32汇编_基础
  2. SpringMVC教程--图片上传
  3. SharePoint 2010 各个常用级别对象的获取
  4. java Junit 为什么@Test注解里的方法必须是public void修饰的
  5. 2d与2.5d坐标转换_ArcGIS中坐标系统定义与投影转换(包含定义三参七参)
  6. sizeof 数组_简单的一维数组竟然有这么多坑?
  7. java中自定义表单和流程_让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑....
  8. 二级域名和二级目录的联系与区别
  9. [转]Objective-C 语言特性
  10. weblogic domain creation
  11. UNIX环境高级编程(三)—— 静态链接库与动态链接库
  12. JAVA常用的工具类
  13. linux服务器上的cad病毒,LibreCAD_LibreCAD下载[2021官方最新版]LibreCAD安全下载_ 极速下载...
  14. python海龟画图(6)多边形(3)圆内接多边形
  15. Qt 远程开关机 WakeOnLAN 编辑MagicPacket
  16. WORD转PDF格式快捷方法(转贴)
  17. vue项目的elementui表格合并
  18. java 禁用迅雷_【Java】我擦!迅雷的代码结构竟然被扒了精光~
  19. 案例1—MP3在线搜索下载程序
  20. Tableau图表制作-蝴蝶图

热门文章

  1. 基于PHP+MySQL的连锁酒店管理系统
  2. python四种统计图————赵俊杰
  3. Word2vec与论文学习
  4. 赛事重启!第五届“强网”拟态防御国际精英挑战赛重磅归来!
  5. 《大话设计模式》之--第17章 在NBA我需要翻译----适配器模式
  6. 浅析磁传感器HALL、AMR、GMR、TMR技术(转载)
  7. MES、生产工艺、智能制造、制造执行系统、工厂管理、生产bom、工艺管理、设备维保、资源负荷、甘特图、生产清单、生产排程、模拟排程、计划库、滚动排程、欠产清单、生产任务池、毛坯需求清单、Axure原型
  8. 寓言故事《赵简子与斑鸠的启示》
  9. nRF52832 Power
  10. 如何在一个APP中加入欢迎页,以及引导页