搜索算法(算法竞赛、蓝桥杯)--BFS八数码难题、抓住那头牛、魔板问题

1、B站视频链接:B14 BFS 八数码难题_哔哩哔哩_bilibili

题目链接:八数码难题 - 洛谷

#include <bits/stdc++.h>
using namespace std;
char c;
string str;
unordered_map<string,int> d;//记录步数
queue<string> q;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};int bfs(string str){q.push(str);string end="123804765";while(q.size()){auto s=q.front();q.pop();if(s==end)return d[s];int k=s.find('0');int x=k/3,y=k%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)continue;int dis=d[s];//记录步数swap(s[k],s[a*3+b]);//交换,乘3加余数if(!d.count(s))d[s]=dis+1,q.push(s);//新布局,步数加一 swap(s[k],s[a*3+b]);//还原继续探照其它的方向 } }
}
int main(){for(int i=0;i<9;i++){cin>>c;str+=c;}cout<<bfs(str);return 0;
} 

2、B站视频链接:B15 BFS 抓住那头牛_哔哩哔哩_bilibili

题目链接:[USACO07OPEN] Catch That Cow S - 洛谷 

#include <bits/stdc++.h>
using namespace std;const int N=100010;
int x,y,dis[N];//记录步数 void bfs(){memset(dis,-1,sizeof dis);//初始化步数dis[x]=0;queue<int> q;q.push(x);//人的位置入队while(q.size()){int x=q.front();q.pop();if(x+1<N&&dis[x+1]==-1){//前进一步,剪枝判重 dis[x+1]=dis[x]+1;//步数加一q.push(x+1);//更新人的位置入队 }if(x-1>0&&dis[x-1]==-1){//后退一步 dis[x-1]=dis[x]+1;q.push(x-1);}if(x*2<N&&dis[2*x]==-1){//走到2*x dis[2*x]=dis[x]+1;q.push(2*x);}if(x==y){//抓住了牛 printf("%d\n",dis[y]);//抓住牛需要的步数 return;}} 
}
int main(){int t;cin>>t;while(t--){cin>>x>>y,bfs();}return 0;
}

3、B站视频链接:B16 BFS 魔板_哔哩哔哩_bilibili

题目链接:[USACO3.2] 魔板 Magic Squares - 洛谷

#include <bits/stdc++.h>
using namespace std;
string ed;//目标串(别用end取名,会报错)
queue<string> q;//队列<状态串>
map<string,string> mp;//哈希<状态串,操作串>void moveA(string x){string y=x;for(int i=0;i<4;i++)swap(x[i],x[7-i]);if(mp.count(x)==0)q.push(x),mp[x]=mp[y]+'A';
}
void moveB(string x){string y=x;x[0]=y[3],x[1]=y[0],x[2]=y[1],x[3]=y[2],//暴力一一对应 x[4]=y[5],x[5]=y[6],x[6]=y[7],x[7]=y[4];if(mp.count(x)==0)q.push(x),mp[x]=mp[y]+'B';
}
void moveC(string x){string y=x;x[1]=y[6],x[2]=y[1],x[5]=y[2],x[6]=y[5];if(mp.count(x)==0)q.push(x), mp[x]=mp[y]+'C';
}
void bfs(){q.push("12345678");mp["12345678"]="";//无操作while(q.size()){string s=q.front();q.pop();moveA(s);moveB(s);moveC(s);if(mp.count(ed)){cout<<mp[ed].size()<<endl<<mp[ed];return ;}}
}
int main(){char c;for(int i=0;i<8;i++){cin>>c,ed+=c;}bfs();return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478589.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用【Python+Appium】实现自动化测试

一、环境准备 1.脚本语言&#xff1a;Python3.x IDE&#xff1a;安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境&#xff0c;path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows&#xff0c;官网地址 Redirecting 点击下载按钮会到GitHub的…

深度学习发展的艺术

将人类直觉和相关数学见解结合后&#xff0c;经过大量研究试错后的结晶&#xff0c;产生了一些成功的深度学习模型。 深度学习模型的进展是理论研究与实践经验相结合的产物。科学家和工程师们借鉴了人类大脑神经元工作原理的基本直觉&#xff0c;并将这种生物学灵感转化为数学模…

基于Springboot的校园求职招聘系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园求职招聘系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

计算机视觉的应用23-OpenAI发布的文本生成视频大模型Sora的原理解密

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用23-OpenAI发布的文本生成视频大模型Sora的原理解密。本文概况性地将Sora模型生成视频主要分为三个步骤&#xff1a;视频压缩网络、空间时间潜在补丁提取以及视频生成的Transformer模型。 文章目录…

OSQP文档学习

OSQP官方文档 1 QSQP简介 OSQP求解形式为的凸二次规划&#xff1a; x ∈ R n x∈R^n x∈Rn&#xff1a;优化变量 P ∈ S n P∈S^n_ P∈Sn​&#xff1a;半正定矩阵 特征 &#xff08;1&#xff09;高效&#xff1a;使用了一种自定义的基于ADMM的一阶方法&#xff0c;只需…

Compose 1.6 发布:性能大升级、拖放新功能、文本新变化...

翻译自&#xff1a; https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html 基于 1 月 24 号的 Compose 发行计划&#xff0c;我们正式推出了 Jetpack Compose 1.6 版本。 作为 Android 平台备受推崇的原生 UI 工具包&…

gin源码实战 day1

gin框架源码实战day1 Radix树 这个路由信息&#xff1a; r : gin.Default()r.GET("/", func1) r.GET("/search/", func2) r.GET("/support/", func3) r.GET("/blog/", func4) r.GET("/blog/:post/", func5) r.GET("/…

【Git】Gitbash使用ssh 上传本地项目到github

SSH Git上传项目到GitHub&#xff08;图文&#xff09;_git ssh上传github-CSDN博客 前提 ssh-keygen -t rsa -C “自己的github电子邮箱” 生成密钥&#xff0c;公钥保存到自己的github的ssh里 1.先创建一个仓库&#xff0c;复制ssh地址 git init git add . git commit -m …

第三十六天| 435. 无重叠区间、763.划分字母区间、56. 合并区间

Leetcode 435. 无重叠区间 题目链接&#xff1a;435 无重叠区间 题干&#xff1a;给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 思考&#xff1a;贪心法。和452 用最少数量的…

算法-矩阵置零

1、题目来源 73. 矩阵置零 - 力扣&#xff08;LeetCode&#xff09; 2、题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1…

单片机01天---stm32基本信息了解

下载数据手册 以STM32F407ZG为例 网站&#xff1a;www.st.com&#xff0c;搜索芯片型号&#xff0c;下载“数据手册”使用 数据手册使用 查看芯片型号信息 芯片资源信息 时钟框图 芯片资源表格下方 GPIO口表格 一般位于下图后面的位置 ①工作电压&#xff1a;1.8V – 3.6V…

8.2 新特性 - 透明的读写分离

文章目录 前言1. 安装部署1.1 下载安装包1.2 MySQL Shell1.3 配置 MySQL 实例1.4 启动 ReplicaSet1.5 启动 8.2 Router 2. 测试路由总结 前言 MySQL 8.0 官方推出过一个高可用方案 ReplicaSet 主要由 Router、MySQL Shell、MySQL Server 三个组件组成。 MySQL Shell 负责管理…