a*s 发帖数: 425 | 1 请教一道题
和hanoi tower有点像,不过有点不一样
有N个stack, 每个stack都有几个数字,
每次,可以从其中的一个stack里取出一个或者几个数,然后放到另外一个stack里,
比如
stack_1里,有数字 4,3,6,2
stack_2里,有5,7,8
那么一次操作,可以从stack_1里,取6,2,然后放入stack_2,
那么,
stack_1里就成了4,3,
stack_2里变成了5,7,8,6,2
或者,可以从stack_1里,去3,6,2 放入 stack_2
那么,
stack_1里就变成了4,
stack_2里就变成了5,7,8,3,6,2
现在的问题是,给定一个初始的状态,一个最终的状态,通过上面的移数规则,找出最
少的移数步骤,
一个简单的例子,
初始状态:
stack_1:3,1,4
stack_2:2,5,
stack_3:(empty)
最终状态:
stack_1:(empty)
stack_2:(empty)
stack_3:1,2,3,4,5
那么最少的移动步骤是5步
1:move 5 from stack_2 to stack_1
2:move 1,4,5 from stack_1 to stack_3
3:move 4,5 from stack_3 to stack_1
4:move 3,4,5 from stack_1 to stack_2
5:move 2,3,4,5 from stack_2 to stack_3 | p*****2 发帖数: 21240 | | a*s 发帖数: 425 | 3 恩,可以具体一点么,
我不是CS的background,
怎么构建搜索的tree呢
【在 p*****2 的大作中提到】 : 应该是最短路径吧?所以BFS。
| p*****2 发帖数: 21240 | 4
不用构建。把状态存到Queue里就可以了。
【在 a*s 的大作中提到】 : 恩,可以具体一点么, : 我不是CS的background, : 怎么构建搜索的tree呢
|
|