题库首页 › 青少年软件编程(C语言) › 题目 4629

玩具摆放 在一个4*4的方框内摆放了若干个相同的玩具。 某人想通过移动玩具,将这些玩具重新摆放成为他心中理想的状态。要求每次移动时,只能将某一个玩具向上下左右四个方向之一移动一步。不能将玩具移出方框,并且移动的目标位置不能已经放置有玩具。 请你用最少的移动次数将初始的玩具状态移动到他心中的目标状态。 时间限制:10000 内存限制:524288 输入 前4行表示玩具的初始状态,每行4个数字1或0,1表示方格中放置了玩具,0表示没有放置玩具。 接着是一个空行。接下来4行表示玩具的目标状态,每行4个数字1或0,意义同上。 输出 一个整数,所需要的最少移动次数。保证初始状态可以达到目标状态。 样例输入 1111 0000 1110 0010 1010 0101 1010 0101 样例输出 4 提示 可以考虑将玩具局面表示为一个16 bit的整数,设置一个标志数组用来判重,用这个整数做下标找其对应标志位

正确答案:参考程序(C++):玩具摆放BFS状态压缩。16bit整数表示棋盘状态,BFS四方向移动,判重数组,求到目标状态最少步数。样例输出4。核心:状态压缩BFS。

试卷来源:202209 青少年等级考试C/C++真题五级

本卷相关题目

在线做题 同科目题库