给我下一个要解决的问题:
“您在一个图书馆中,有n个表,编号从0到n-1。每个表上都有一本书,也从0到n-1编号,但是它们不一定在相应的表上。 您正站在给定的位置前面(例如,表编号k),并且要求您将所有书籍放在相应的桌子上(对它们进行订购),以尽可能最短的距离行走(考虑从表m到n的行走距离) | nm |),并在您开始的同一张表中完成(表k)。为此,您一次只能携带一本书,并且只能在两张桌子之间移动,还需要执行3个动作:在您面前的桌子上捡起这本书,将您正在携带的桌子放在前面(如果是空的)或在桌上的书和您携带的书之间交换。”
我认为问题是一种排序算法,在数组中“来回”移动,并尝试“携带”该书,该书的最大编号在向右移动,最小编号在向左移动(交换)当我发现一本比我要携带的书本大/小的书时(取决于我要移动的那一侧),并且当我处于正确的位置时,将书本与那里的书本交换并继续。另外,我将每一步都算为1的距离并加总。最后,加上我对所有数组排序后的结束位置与开始位置之间的距离。
但是我不知道这是否是最佳解决方案,所以我想知道是否还有更好的选择。