当前位置: 首页 > news >正文

算法提高之魔板

算法提高之魔板

  • 核心思想:最短路模型

    • 将所有状态存入队列 更新步数 同时记录前驱状态
  •   #include <iostream>#include <cstring>#include <algorithm>#include <unordered_map>#include <queue>using namespace std;string start="12345678";char g[2][4];  //存矩阵unordered_map<string,pair<char,string>> pre;  //第一维当前状态 第二维(走法,前驱状态)unordered_map<string,int> dist;void set(string state)  //将字符串放入矩阵{for(int i=0;i<4;i++) g[0][i] = state[i];for(int i=7,j=0;j<4;i--,j++) g[1][j] = state[i];}string get()  //将矩阵提取成字符串{string res;for(int i=0;i<4;i++) res += g[0][i];for(int i=3;i>=0;i--) res += g[1][i];return res;}string move0(string state)  //走法A{set(state);for(int i=0;i<4;i++) swap(g[0][i],g[1][i]);return get();}string move1(string state)  //走法B{set(state);int v0 = g[0][3],v1 = g[1][3];for(int i=3;i>0;i--){g[0][i] = g[0][i-1];g[1][i] = g[1][i-1];}g[0][0] = v0,g[1][0] = v1;return get();}string move2(string state)  //走法C{set(state);int v = g[0][1];g[0][1] = g[1][1];g[1][1] = g[1][2];g[1][2] = g[0][2];g[0][2] = v;return get();}int bfs(string start,string end){if(start == end) return 0;queue<string> q;q.push(start);dist[start] = 0;while(!q.empty()){auto t = q.front();q.pop();string m[3];m[0] = move0(t);m[1] = move1(t);m[2] = move2(t);for(int i=0;i<3;i++){if(!dist.count(m[i])){dist[m[i]] = dist[t] + 1;pre[m[i]] = {'A' + i,t};  //存前驱q.push(m[i]);if(m[i] == end) return dist[end];}}}return -1;}int main(){int x;string end;for(int i=0;i<8;i++){cin>>x;end+=char(x+'0');}int step = bfs(start,end);cout<<step<<endl;string res;while(end != start){res += pre[end].first;end = pre[end].second;}reverse(res.begin(),res.end());  //走法是倒过来的 倒置一下if(step > 0) cout<<res<<endl;}
    
http://www.lryc.cn/news/346512.html

相关文章:

  • 服务器内存占用不足会怎么样,解决方案
  • elasticsearch文档读写原理大致分析一下
  • 1 开发环境
  • 云视频,也称为视频云服务,是一种基于云计算技术理念的视频流媒体服务
  • [Vision Board创客营]--使用openmv识别阿尼亚
  • 【Linux:lesson1】的基本指令
  • 20240511日记
  • 蓝桥杯成绩已出
  • .kat6.l6st6r勒索病毒数据怎么处理|数据解密恢复
  • Spring Batch 是什么?主要用于什么场景?
  • SQL-慢查询的定位及优化
  • 练习题(2024/5/11)
  • linux系统服务器中常见故障及排查方法
  • 产品人生(5):从“敏捷开发”到“四化时间管理法”
  • 超级好看的html网站维护源码
  • 从零开始搭建Springboot项目脚手架2:配置文件、返回值、日志等
  • Java web第五次作业
  • Unity使用ToggleGroup对多个Toggle进行管理时,初始化默认选项失效的问题
  • Retrofit同步请求直接返回目标对象
  • Android GPU渲染屏幕绘制显示基础概念(1)
  • Mac电脑设置hosts的方法
  • 数据分析——大数据伦理风险分析
  • 漫谈AI时代的手机
  • fatal error: ros/ros.h: 没有那个文件或目录
  • 苍穹外卖Day06笔记(复习了jwt的加密解密和传递)
  • 【ARM 嵌入式 C 字符串系列 23.9 -- strcmp 与 strncmp 在使用上的区别以及注意事项】
  • 行列视(RCV):企业数据处理的革新工具
  • Oracle Patch清理
  • Redis-三主三从高可用集群搭建
  • ImageMagick