魔板(BFS——python实现)

'''
问题 B: 魔板
利用队列实现宽度优先搜索(BFS)
'''
import sys
from queue import Queue


def A(s):
    a = s[:4]
    b = s[4:]
    return b + a


def B(s):
    a = s[3]
    b = s[7]
    s1 = s[:3]
    s2 = s[4:7]
    return a + s1 + b + s2


def C(s):
    a, b, c, d, e, f, g, h = s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7]
    return a + f + b + d + e + g + c + h


def bfs():  # 主要是理解先进先出队列机制在该题中的巧妙运用
    global flag, result, init
    q.put(init)
    case.setdefault(init, 0)
    while not q.empty():
        t = q.get()  # 获取当前队列第一个值
        m = [0 for i in range(3)]  # 用于存放三种状态变换后的值
        m[0] = A(t)
        m[1] = B(t)
        m[2] = C(t)
        for i in range(3):
            if m[i] not in case:
                case[m[i]] = case[t] + 1  # case键为变换后的字符串,值为第几次变换
                pre[m[i]] = [chr(ord('A') + i), t]  # t标示上一节点,以此来追踪找回操作顺序
                q.put(m[i])
                if m[i] == result:
                    return case[result]


q = Queue()
init = '12348765'
fo = list(map(str, sys.stdin.readline().split()))
# 对结果字符串进行变换
result = ''
for i in range(len(fo)):
    result += fo[i]
a = result[:-5:-1]
b = result[:4]
result = b + a

case = {}  # 以字典形式存放每次操作变换后的字符串(键)和变换次数(值)
pre = {}  # 以字典形式存放每次操作变换后的字符串(键)和  [变换操作的名称,变换前的字符串]  (值-列表形式)
bfs()
biu = case[result]
print(biu)
mm = [0 for i in range(biu)]
a = pre[result][0]
mm[-1] = a
b = pre[result][1]
for i in range(1, biu):
    c = pre[b][0]
    mm[biu - i - 1] = c
    b = pre[b][1]
for i in range(biu):
    if i != biu - 1:
        print(mm[i], end='')
    else:
        print(mm[i])

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
魔板游戏课程设计 魔板游戏是一种智力开发类的益智游戏,它可以培养学生的逻辑思维、空间想象力以及解决问题的能力。为了设计一门有效的魔板游戏课程,我将考虑以下几个方面: 1. 课程目标:通过魔板游戏,培养学生的逻辑推理能力、团队合作意识、问题解决能力以及创新思维。同时,让学生了解计算机科学的基本概念和原理。 2. 课程内容:课程内容可以分为理论和实践两部分。在理论部分,可以介绍魔板游戏的历史、背景以及基本规则。同时,讲解计算机科学的相关知识,如算法、编程思维等。在实践部分,学生可以通过编程语言如Python或JavaScript来实现魔板游戏,并进行各种挑战和创新。 3. 教学方法:结合理论和实践,采用讲解、示范、练习和项目实践等多种教学方法。同时,鼓励学生进行团队合作和互动讨论,培养他们的合作精神和解决问题的能力。 4. 评估方式:通过课堂测验、编程作业和项目实践等多种评估方式来评估学生的学习成果。除此之外,还可以组织小组比赛来评选出优秀的魔板设计和解决方案。 5. 参考资源:引入一些优质的参考资源,如在线教程、博客文章和相关书籍,让学生可以深入学习和掌握魔板游戏的各个方面。 通过以上设计方案,这门魔板游戏课程能够帮助学生增加对计算机科学的兴趣,并培养他们的创造力和解决问题的能力。同时,这门课程也能够帮助学生提高逻辑思维和团队合作能力,为他们未来的学习和职业发展打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁动了我的马卡龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值