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

Python:青蛙跳杯子(BFS)

题目描述

X 星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。

X 星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。

如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。

∗WWWBBB

其中,W 字母表示白色青蛙,B 表示黑色青蛙,∗ 表示空杯子。

X 星的青蛙很有些癖好,它们只做 3 个动作之一:

  1. 跳到相邻的空杯子里。

  2. 隔着 1 只其它的青蛙(随便什么颜色)跳到空杯子里。

  3. 隔着 2 只其它的青蛙(随便什么颜色)跳到空杯子里。

对于上图的局面,只要 1 步,就可跳成下图局面:

WWW∗BBB

本题的任务就是已知初始局面,询问至少需要几步,才能跳成另一个目标局面。

输入描述

输入为 2 行,2 个串,表示初始局面和目标局面。我们约定,输入的串的长度不超过 15。

输出描述

输出要求为一个整数,表示至少需要多少步的青蛙跳。

输入输出样例

示例

输入

*WWBB
WWBB*

输出

2

 思路:

当前状态可能的变化状态:
        1、左\右移一个格到 空格位置
        2、左\右移两个格到 空格位置
        3、左\右移三个格到 空格位置
任务要求是从初始状态到目标状态最短路径(最少跳动次数)
搜索跳动一次所有的可能结果,并保存所以可能性作为下次搜索的初始状态。

参考代码:

import sys
chushi = input()
mubiao = input()
lis = [1,-1,2,-2,3,-3]
experience = {chushi} #标记状态
queue= [[chushi,0]]  #状态和层数
while queue:  #若不为空old = queue.pop(0) #弹出第一个元素for i in lis:state = list(old[0])  #字符串转化为列表step = old[1]kgwz = state.index('*') #查找空格位置xkgwz = kgwz + i   #新空格位置if 0<=xkgwz<len(chushi):  #判断新空格位置是否出界state[kgwz] = state[xkgwz]state[xkgwz] = '*'new_state = "".join(state)step += 1if new_state == mubiao:print(step)sys.exit(0)  #程序终止if new_state not in experience: #若新状态没有出现过以前的状态中experience.add(new_state)queue.append([new_state,step])
http://www.lryc.cn/news/5651.html

相关文章:

  • 6.10 谱分解
  • MySQL入门篇-MySQL 行转列小结
  • 项目管理常见的十大难题及其症状
  • 技术方案模板
  • MySQL中对于单表和多表的操作
  • MFI认证
  • Vue中mixins的使用
  • 【PyQt】PyQt学习(一)框架介绍+环境搭建
  • 浅谈前端设计模式:策略模式和状态模式的异同点
  • 线性杂双功能PEG试剂OPSS-PEG-Acid,OPSS-PEG-COOH,巯基吡啶聚乙二醇羧基
  • 开发微服务电商项目演示(四)
  • 【C语言学习笔记】:静态库
  • 社科院与杜兰大学中外合作办学金融管理硕士——30+的年龄在职读研有必要吗?
  • 2.13作业【设备树解析,按自己理解】
  • 《NFL星计划》:巴尔的摩乌鸦·橄榄1号位
  • Allegro如何设置自动保存和自动保存的时间操作指导
  • Kotlin实现简单音乐播放器
  • ShardingSphere-Proxy 数据库协议交互解读
  • 基于ubuntu20.4的wine的MDK5软件的安装
  • Jmeter之直连数据库框架搭建简介
  • 备战蓝桥杯【高精度乘法和高精度除法】
  • 火眼审阅 | 基于NLP和OCR识别技术赋能合同审阅
  • 关于在集合中对象比较属性值的问题
  • java微信小程序旅游管理系统
  • 2023年要跟踪的11个销售管理关键指标
  • MongoDB--》基本常用命令使用
  • js浮点数四则运算精度丢失以及toFixed()精度丢失解决方法
  • 高姿态下的面部表情识别系统
  • English Learning - Day59 作业打卡 2023.2.13 周一
  • 图机器学习