D3-八数码

devtools/2024/10/11 7:25:40/

D3-八数码

  • 题目描述
  • 解题思路
  • 代码如下

题目描述

在这里插入图片描述

解题思路

本题若直接在3*3网格中思考较为困难,可以转换为一维的字符串,在一维字符串中考虑较为简单,要注意本题中两个字符交换位置时只能是x和另外字符交换,本题另外一个难点在于如何维护一个距离数组用于表示交换的次数(可用map,代码中会有注释)

代码如下

#include<bits/stdc++.h>
using namespace std;
unordered_map<string,int> dist;//维护一个从开始状态到结束状态的转换次数
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};//上下左右移动的数轴,dx是左右移动,dy是上下移动
string s1="12345678x";//最终状态,用于和中间状态进行比较int bfs(string s)
{queue<string> q;q.push(s);dist[s]=0;//刚开始是转换次数为0while(q.size()){string f=q.front();q.pop();int distance = dist[f];//将这个状态的转换次数存起来,因为下面会交换元素位置if(f==s1) return distance;int k=f.find('x');int x=k/3,y=k%3;//将s中的元素的一维位置转换为3*3的位置元素for(int i=0;i<4;i++){int a=x+dx[i],b=y+dy[i];if(a>=0&&a<3&&b>=0&&b<3){swap(f[k],f[a*3+b]);//再将3*3中的位置转换为s中的一维位置if(!dist.count(f)){dist[f] = distance+1;q.push(f);}swap(f[k],f[a*3+b]);//转换完之后要再转回来}}}return -1;
}int main()
{string s;char c;for(int i=0;i<3;i++)for(int j=0;j<3;j++){cin>>c;s+=c;}cout<<bfs(s)<<endl;return 0;
}

http://www.ppmy.cn/devtools/6631.html

相关文章

图论学习总结

目录 图论学习总结前言一、基础知识图的存储图的遍历 二、最短路多源最短路 F l o y d Floyd Floyd​ 算法例题及变形 e g 1 &#xff1a; S o r t i n g I t A l l O u t eg1&#xff1a;Sorting\ It\ All\ Out eg1&#xff1a;Sorting It All Out ( 蓝书例题&#xff0c;传递…

C语言入门算法——选数

题目描述&#xff1a; 已知 n 个整数 x1​,x2​,⋯,xn​&#xff0c;以及 1 个整数 k&#xff08;k<n&#xff09;。从 n 个整数中任选 k 个整数相加&#xff0c;可分别得到一系列的和。例如当 n4&#xff0c;k3&#xff0c;4个整数分别为3,7,12,19 时&#xff0c;可得全部…

稀碎从零算法笔记Day51-LeetCode:最小路径和

题型&#xff1a;DP、数组、矩阵 链接&#xff1a;64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为…

如何在 Ubuntu 上启用 IPv6

一、前提条件 一台安装了 Ubuntu 22.04 的计算机具有 sudo 权限的用户账户已连接到支持 IPv6 的网络 二、检查系统是否支持 IPv6 在启用 IPv6 之前&#xff0c;首先要确保您的系统支持 IPv6。要检查内核是否启用了 IPv6&#xff0c;可以运行以下命令&#xff1a; cat /proc/…

Android --- 布局与点击事件

View&#xff08;视图) 此类代表用户界面组件的基本构建块。视图占据屏幕上的一个矩形区域&#xff0c;负责绘图和事件处理。View 是widgets的基类&#xff0c;用于创建交互式 UI 组件&#xff08;按钮、文本字段等&#xff09;。 子类是布局ViewGroup的基类&#xff0c;布局是…

美团财务科技后端一面:如何保证数据一致性?延时双删第二次失败如何解决?

更多大厂面试内容可见 -> http://11come.cn 美团财务科技后端一面&#xff1a;项目内容拷打 美团财务科技后端一面&#xff1a;项目相关面试题&#xff0c;主要包含 Zset、延时双删失败重试、热点数据解决、ThreadLocal 这几个方面相关的内容 由于前几个问题是对个人项目的…

记录golang日常错误处理

golang工作错误记录 1.报错:invalid flag in #cgo LDFLAGS: -Wl,–rpath./ 解决方式: export CGO_CFLAGS_ALLOW".*" export CGO_LDFLAGS_ALLOW".*"2.go get失败 解决方式: go env -w GO111MODULEon3.go代理设置 go env -w GOPROXYhttps://goproxy.cn,d…

Python基础:【练手小实验系列】列表、元组、字典、集合

文章目录 题目练习题1: 列表合并和排序练习题2: 元组元素计数练习题3: 字典键值互换练习题4: 集合的交集与并集参考答案练习题1: 列表合并和排序练习题2: 元组元素计数练习题3: 字典键值互换练习题4: 集合的交集与并集题目 练习题1: 列表合并和排序 题目描述: 给定两个已经排…