题目: 黑白棋游戏

这是一篇关于黑白棋游戏的编程题解,利用广度优先搜索(BFS)算法解决从初始游戏状态到达目标状态的最短着棋序列问题。题目描述了棋盘的构成和操作规则,输入和输出格式,以及样例。作者分享了代码实现,并提到在某些环境下编译可能出现问题,建议使用数组替代bitset进行优化。

黑白棋游戏

题目描述

黑白棋游戏的棋盘由 4 × 4 4 \times 4 4×4 方格阵列构成。棋盘的每一方格中放有 1 1 1 枚棋子,共有 8 8 8 枚白棋子和 8 8 8 枚黑棋子。这 16 16 16 枚棋子的每一种放置方案都构成一个游戏状态。在棋盘上拥有 1 1 1 条公共边的 2 2 2 个方格称为相邻方格。一个方格最多可有 4 4 4 个相邻方格。在玩黑白棋游戏时,每一步可将任何 2 2 2 个相邻方格中棋子互换位置。对于给定的初始游戏状态和目标游戏状态,编程计算从初始游戏状态变化到目标游戏状态的最短着棋序列。

输入格式

输入文件共有 8 8 8 行。前四行是初始游戏状态,后四行是目标游戏状态。每行 4 4 4 个数分别表示该行放置的棋子颜色。“ 0 0 0 ”表示白棋;“ 1 1 1 ”表示黑棋。

输出格式

输出 n n n,表示最少需要多少步才能到达目标状态。

样例 #1

样例输入 #1

1111
0000
1110
0010
1010
0101
1010
0101

样例输出 #1

4

提示

提示就是没有提示awa



题解

        这是一道非常直白的广度优先搜索问题,所以只要套模板即可,模板可以参考我之前的文章

简单分析一下,每次有24种交换的可能,即每一行的 第一个 第二个 第二个 第三个第三个 第四个交换,每一列的第一个 第二个 第二个 第三个第三个 第四个交换。那么只要根据这个构建出一棵树就好啦。


废话不多说,上代码!

#include <iostream>
#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值