我的任务是编写一些代码,找到将给定起始堆栈带到给定目标堆栈的最短移动序列。我得到了一本书的原始列表,描绘了如何开始堆栈,以及一本书的目标列表,显示了我需要它们的目标顺序。问题在于标准排序算法不起作用,因为它的排序书籍是基于一个人的偏好,而不是任何特定的逻辑。
问题要求您使用的系统如下:从堆栈中的任何位置拉出一本书,一次一个,并将其放在堆栈顶部。因此,如果您有书籍X,Y和Z,您可以选择拉出Y,制作Y,X,Z顺序。
初始:
'1984 - George Orwell'
'Moby Dick - Herman Melville'
'To Kill A Mockingbird - Harper Lee'
'Atlas Shrugged - Ayn Rand'
'The Black Cat - Edgar Allen Poe'
目标:
'Atlas Shrugged - Ayn Rand'
'To Kill A Mockingbird - Harper Lee'
'1984 - George Orwell'
'Moby Dick - Herman Melville'
'The Black Cat - Edgar Allen Poe'
这是作业。但是,我并不是在寻找人为我这样做,因为这会破坏作业的目的。我只是在寻找一些入门的想法或提示,因为我不知道从哪里开始。
注意:我打算将其标记为作业,但标签明确表示不这样做,所以我没有。如果这是错的,请纠正我。
答案 0 :(得分:4)
好的,主要的问题是你只能登上顶部,但你可以选择任何一本书。你想要提示,而不是方法,所以这里有一些:
我希望这能让你开始,我没有明确表达。
答案 1 :(得分:0)
一个非常简单的算法就是循环遍历堆栈,每次找到并拉出属于底部的下一本书。对于小堆栈,线性搜索就足够了。
在您的示例中,您将在第一次迭代时提取'The Black Cat - Edgar Allen Poe'
,在第二次迭代时提取'Moby Dick - Herman Melville'
,在第三次等方式提取'1984 - George Orwell'
。
这是一个O(n ^ 2)算法。