青蛙跳杯子【蓝桥杯】/bfs

青蛙跳杯子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bfs

思路:刚开始用的是dfs,但是不太行,DFS 可能会导致搜索深度过深,增加了时间复杂度,BFS 适合求解最短路径问题,BFS 在搜索过程中,首先访问距离初始节点最近的节点,因此可以保证找到的路径是最短的,所以应该选择bfs。
本题可以以*为切入点,来进行跳跃

#include<iostream>
#include<cmath>
#include<queue>
#include<algorithm>
#include<cstring>
#include<map>
using namespace std;
typedef long long ll;
string s1,s2;
//需要用这个来存储一个串如果已经被访问过就不用再跳了,不然会重复很多
map<string,bool> m;
ll bfs(int n)
{queue<pair<string,ll>> q;q.push({s1,0});while(!q.empty()){string s=q.front().first;//代表步数ll num=q.front().second;q.pop();if(s==s2) return num;if(m[s]) continue;m[s]=1;int idx=s.find('*');string temp;//交换左边第一个if(idx>0){temp=s;swap(temp[idx],temp[idx-1]);q.push({temp,num+1});}//交换左边第二个if(idx>1){temp=s;swap(temp[idx],temp[idx-2]);q.push({temp,num+1});}//交换左边第三个if(idx>2){temp=s;swap(temp[idx],temp[idx-3]);q.push({temp,num+1});}//交换右边第一个if(idx<n-1){temp=s;swap(temp[idx],temp[idx+1]);q.push({temp,num+1});}//交换右边第二个if(idx<n-2){temp=s;swap(temp[idx],temp[idx+2]);q.push({temp,num+1});}//交换右边第三个if(idx<n-3){temp=s;swap(temp[idx],temp[idx+3]);q.push({temp,num+1});}}return -1;
}
int main()
{cin>>s1>>s2;int n=s1.size();cout<<bfs(n)<<endl;return 0;
}

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

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

相关文章

【Python】基础语法练习---人生重开模拟器

人生重开模拟器游戏: http://remake.solaking.com/#google_vignette 此处只做简单的模拟,旨在联系Python语法: 为了简单起见此处只模拟人生中1-10岁的经历: 效果演示: 代码实现: # 人生重开模拟器 # pycharm自动导入的模块 import random import sys import timeprint(-----…

发到网站上的大量图片如何才能防止盗图?答案是加自己的水印logo

批很多摄影师&#xff0c;摄影爱好者&#xff0c;喜欢把自己拍摄的照片&#xff0c;后期加个小水印&#xff0c;很有专属感。还有一些做电商&#xff0c;微店的伙伴&#xff0c;经常需要发产品图&#xff0c;也需要放上产品信息&#xff0c;店名等水印&#xff0c;防止盗图。 …

【JavaWeb】Day35.MySQL概述——数据库设计-DDL(二)

表操作 关于表结构的操作也是包含四个部分&#xff1a;创建表、查询表、修改表、删除表。 1.创建 语法 create table 表名( 字段1 字段1类型 [约束] [comment 字段1注释 ], 字段2 字段2类型 [约束] [comment 字段2注释 ], ...... 字段n 字段n类型 [约束] [comment …

Hackthebox IClean

靶机信息IP/难度Medium网址https://app.hackthebox.com/machines/IClean状态Active系统Linux Python XSS, SSTI 端口扫描 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 256 2cf9077…

寻找排序数组中的最小值

题目描述 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,2]若旋转 7 次…

【MYSQL之进阶篇】视图、存储过程、存储函数以及触发器

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;mysql专栏&#xff1a;小林同学的专栏 1.视图 1.1 定义 视图是MySQL数据库中的虚拟表&#xff0c;它基于一个或多个实际表的查询结果。视图提供了一种简单的 方法来封装和重用复杂的查询&#xff0c;同时…

2024HW --->反序列化漏洞!

对于反序列化&#xff0c;这个漏洞也是常用的&#xff0c;不过涉及到的方面非常非常广&#xff0c;比其他漏洞也难很多 于是本篇文章就分成PHP和JAVA的反序列化来讲讲 1.反序列化 想要理解反序列化&#xff0c;首先就要理解序列化 序列化&#xff1a;把对象转换为字节序列的过…

LeetCode-78. 子集【位运算 数组 回溯】

LeetCode-78. 子集【位运算 数组 回溯】 题目描述&#xff1a;解题思路一&#xff1a;回溯&#xff0c;回溯三部曲解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子…

Android Glide

1.引入glide implementation com.github.bumptech.glide:glide:4.14.2 // Skip this if you dont want to use integration libraries or configure Glide. annotationProcessor com.github.bumptech.glide:compiler:4.14.2 //Glide 注解处理器 2.AndroidManifest.xml 中添加…

加州大学欧文分校英语基础语法专项课程02:Questions, Present Progressive and Future Tenses 学习笔记

Questions, Present Progressive and Future Tenses Course Certificate 本文是学习 Questions, Present Progressive and Future Tenses 这门课的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 Questions, Present Progressive and Future TensesWeek 01: …

【STL学习】(3)vector容器

前言 本章主要内容为两个部分&#xff1a; vector是什么&#xff1f;vector常用接口的使用。 一、vector的介绍 vector是表示可变大小数组的容器就像数组一样&#xff0c;vector也采用的连续空间来存储元素。也意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样…

Tensorflow2.0笔记 - 自定义Layer和Model实现CIFAR10数据集的训练

本笔记记录使用自定义Layer和Model来做CIFAR10数据集的训练。 CIFAR10数据集下载&#xff1a; https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 自定义的Layer和Model实现较为简单&#xff0c;参数量较少&#xff0c;并且没有卷积层和dropout等&#xff0c;最终准确率…