计蒜客:密码锁—bfs

题目描述:

现在一个紧急的任务是打开一个密码锁。密码由四位数字组成,每个数字从1到9进行编号。每次可以对任何一位数字加1或减1.当将9加1时,数字变为1,当1减1时,数字变为9.还可以交换相邻的数字,每一个行动记做一步。求最少步骤打开密码锁。
输入格式:
第一行输入四位数字,表示密码锁的初始状态
第二行输入四位数字,表示开锁的密码。
输出格式:
输出一个整数,即最小步骤数。
样例输入:
1234
2144
样例输出:
2

解题思路:
广搜。
将锁的位置看做是四维的一个坐标系。和迷宫的操作依然差不多,这样就没有很大的难度了,只不过添加了一些操作。本质上也没怎么变化。

AC代码:

//密码锁
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <math.h>
#include <queue>
#include <vector>
using namespace std;
struct node
{int num[4];int step;
}first,last;
int vis[10][10][10][10];
int bfs()
{int temp1,temp2,i,j; node a,next;a=first;a.step=0;//首元素进队queue<node>q;q.push(a);//标记首元素vis[a.num[0]][a.num[1]][a.num[2]][a.num[3]]=1;while(!q.empty()){a=q.front();q.pop();//退出条件 if(a.num[0]==last.num[0]&&a.num[1]==last.num[1]&&a.num[2]==last.num[2]&&a.num[3]==last.num[3])return a.step;//+1操作for(int i=0;i<4;i++){next=a;next.num[i]++;if(next.num[i]==10){next.num[i]=1;}if(!vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]){vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]=1;next.step++;q.push(next);}}//-1操作for(int i=0;i<4;i++){next=a;next.num[i]--;if(next.num[i]==0){next.num[i]=9;}if(!vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]){vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]=1;next.step++;q.push(next);}}//交换 ,其实两边都交换的话,必然重复,所以这里可以仅仅和右边的数交换 for(int i=0;i<3;i++) {next=a;next.num[i]=a.num[i+1];next.num[i+1]=a.num[i];if(!vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]){vis[next.num[0]][next.num[1]][next.num[2]][next.num[3]]=1;next.step++;q.push(next);}}}
}
int main()
{//每个数字有3个状态:1、加一 2、减一  3、与右边相邻交换 //当将9加1时,数字变为1,当1减1时,数字变为9.还可以交换相邻的数字,每一个行动记做一步int i;char str1[5],str2[5];cin>>str1>>str2;for(i=0;i<strlen(str1);i++){first.num[i]=str1[i]-'0';last.num[i]=str2[i]-'0';}int ans=bfs();cout<<ans<<endl;return 0;
}

计蒜客:密码锁---bfs相关推荐

  1. 计蒜客:迷宫(二)---bfs

    计蒜客:bfs求解迷宫游戏 题目描述: 蒜头君在你的帮助下终于逃出了迷宫,但是蒜头君并没有沉浸于喜悦之中,而是很快的又陷入了思考,从这个迷宫逃出的最少步数是多少呢? 输入格式 第一行输入两个整数 nn ...

  2. 计蒜客题解——T1214:鸣人和佐助

    题目相关 题目链接 计蒜客 OJ,https://nanti.jisuanke.com/t/T1214. 题目描述 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到 ...

  3. 计蒜客题解——T1213:拯救行动

    题目相关 题目链接 计蒜客 OJ,https://nanti.jisuanke.com/t/T1213. 题目描述 公主被恶人抓走,被关押在牢房的某个地方.牢房用 N×M(N,M≤200) 的矩阵来表 ...

  4. 计蒜客题解——T1769:最大岛屿

    题目相关 题目链接 计蒜客,https://nanti.jisuanke.com/t/T1405. 我的OJ,http://47.110.135.197/problem.php?id=5254. 题目 ...

  5. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析

    新手,欢迎交流,剩下D题不知如何下手,望大佬指教. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:计算周长 B. 结果填空:七巧板 C. 结果填空:苹果 ...

  6. 计蒜客题解——T1244:单词序列

    题目相关 题目链接 计蒜客 OJ,https://nanti.jisuanke.com/t/T1244. 我的 OJ,http://47.110.135.197/problem.php?id=4766 ...

  7. 计蒜客题解——T1414:抠图

    题目相关 题目链接 计蒜客,https://nanti.jisuanke.com/t/T1414. 我的 OJ,http://47.110.135.197/problem.php?id=4768. 题 ...

  8. 坑!计蒜客——乳草的侵占

    计蒜客--乳草的侵占(BFS) BFS一直写不会,可能是多加了个队列,写起来不是太容易.不过最近还是稍微入门了BFS,跟DFS差别不太大,还是由三个部分组成--出口.标记.枚举. DFS的主要的思想就 ...

  9. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析

    新手,欢迎交流,更新完毕. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:有趣的数字 B. 结果填空:爬楼梯 C. 结果填空:七巧板 D. 结果填空:苹果 ...

最新文章

  1. UA OPTI512R 傅立叶光学导论17 离散傅立叶变换简介
  2. 【蓝桥杯】基础练习 十六进制转八进制(Java实现)
  3. R语言观察日志(part17)--.Primitive
  4. RHEL 5服务篇—常用网络配置命令
  5. 1 FI配置-企业结构-定义-创建集团公司(Company)
  6. centos 访问网页重启php_php项目上线基于docker运行php+源码编译实现Nginx+阿里云RDS连接实现...
  7. arailsdemo 1
  8. Python 遗传算法 Genetic Algorithm
  9. python3安装详细教程
  10. 数据分析职位需求分析报告-数据来源于Boss直聘网站
  11. 没有人能拒绝这个网站,没有人!
  12. HTML5堆木头游戏
  13. 【noi.ac #1997】A. 制胡窜
  14. IBM:金融的话语权仍掌握在银行手中
  15. 如何学计算机作文3000到500,作文学习电脑500字(共8篇)
  16. 世界上最著名的24句哲理
  17. 人工智能数学基础: 18-Haar矩阵的Kronecker积构造
  18. git 上传出现“ ! [rejected] master -> master (non-fast-forward)”
  19. 美国加州中学课本 教材介绍 - Glencoe系列- 美国初中语文 数学 科学 健康
  20. 【R - 代码书写习惯、代码注释方法笔记】

热门文章

  1. 显控一体机选型_显控一体机_显之研
  2. K-T条件的学习拉格朗日函数
  3. SQL语句的约束条件
  4. 与门或门非门是计算机语言吗,什么叫与门、非门、或门
  5. 素数求解的C语言方法
  6. Java基础一(Java核心技术卷I)
  7. python富翁与陌生人编程_GitHub近10万星:印度小哥用Python和Java实现所有AI算法
  8. 位、比特(bit)、字节(byte)(B)、KB、MB、GB的含义
  9. CTF题库实验吧女神 (猫流大大发现一个女神,你能告诉我女神的名字么(名字即是flag))
  10. 全球量化宽松,能否引发通货膨胀?