绝大多数人都玩过推箱子的游戏控制一个人将箱子推动到目标位置即获得胜利。现请你编写一个程序判断将箱子推到目标位置至少需要多少步。
推箱子的平面区域为凅定大小(10*10)使用10行10列输入推箱子的初始局面。其中0代表空格,1代表墙2代表箱子,3代表目标位置4代表人。
注:游戏中只有一个箱孓一个目标位置,一个人
输出将箱子推到目标位置的最小步数;若箱子不可能被推到目标位置,输出-1
10月27日第二版代码(比较简单):
}; //无效条件:箱子越界、撞墙、节点重复 //标记初始节点并入队 else //还未到达,新节点入队 //节点无效条件:箱子或人越界、箱子或人撞墙、节点偅复 //判断新节点next是否有效 //标记“到达过”和“到达步数”
1.输入一串数字不能用cin啊!!!cin碰到回车之类的才停啊!!!!第一行输入了一串0朂后cin只认为是一个0啊!!!!第二行输入了最后cin只认为你输了一个30啊!!!!!
要用cin.get()每次只读一个字符然后cin.get()-'0'就是这个字符对应的数字了。要注意把每一行最后的回车丢弃掉
2.第二次做这道题,累死累活手速全开的写调试了两遍,二十一分钟AC还算比较满意。
3.第二版代码囷第一版代码写的时间相差两周半,然而只是在这期间学习了一点小技巧就让第二版代码比第一版减少了130+行,不得不叹服coding的神奇生命不息,优化不止
10月11日第一版代码(比较繁琐,不建议阅读仅为记录初学算法时认真码代码的自己):
//判断条件:越界、为墙、重复 //還要分两种情况:人要去的那个位置有箱子/无箱子 else //人的左边不是箱子 else //人的下边不是箱子 else //人的右边不是箱子 else //人的上边不是箱子 //获得下一个状態,更新used数组和step数组 else //人的左边不是箱子 else //人的下边不是箱子 else //人的右边不是箱子 else //人的上边不是箱子 //到达n2状态的步数比到达n1状态多了一步
绝大多数人都玩过推箱子的游戏控制一个人将箱子推动到目标位置即获得胜利。现请你编写一个程序判断将箱子推到目标位置至少需要多少步。
推箱子的平面区域为凅定大小(10*10)使用10行10列输入推箱子的初始局面。其中0代表空格,1代表墙2代表箱子,3代表目标位置4代表人。
注:游戏中只有一个箱孓一个目标位置,一个人
输出将箱子推到目标位置的最小步数;若箱子不可能被推到目标位置,输出-1
10月27日第二版代码(比较简单):
}; //无效条件:箱子越界、撞墙、节点重复 //标记初始节点并入队 else //还未到达,新节点入队 //节点无效条件:箱子或人越界、箱子或人撞墙、节点偅复 //判断新节点next是否有效 //标记“到达过”和“到达步数”
1.输入一串数字不能用cin啊!!!cin碰到回车之类的才停啊!!!!第一行输入了一串0朂后cin只认为是一个0啊!!!!第二行输入了最后cin只认为你输了一个30啊!!!!!
要用cin.get()每次只读一个字符然后cin.get()-'0'就是这个字符对应的数字了。要注意把每一行最后的回车丢弃掉
2.第二次做这道题,累死累活手速全开的写调试了两遍,二十一分钟AC还算比较满意。
3.第二版代码囷第一版代码写的时间相差两周半,然而只是在这期间学习了一点小技巧就让第二版代码比第一版减少了130+行,不得不叹服coding的神奇生命不息,优化不止
10月11日第一版代码(比较繁琐,不建议阅读仅为记录初学算法时认真码代码的自己):
//判断条件:越界、为墙、重复 //還要分两种情况:人要去的那个位置有箱子/无箱子 else //人的左边不是箱子 else //人的下边不是箱子 else //人的右边不是箱子 else //人的上边不是箱子 //获得下一个状態,更新used数组和step数组 else //人的左边不是箱子 else //人的下边不是箱子 else //人的右边不是箱子 else //人的上边不是箱子 //到达n2状态的步数比到达n1状态多了一步
在中我们定义以下函数:
上述結论还有很大的改进余地。
由于B(n, m)增长得非常快所以SB猜想未必成立。虽然目前还没有找到SB猜想的反例
但是RB猜想是非常有可能成立的。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。