Estou tentando simular um elevador, como sempre, comecei muito simples, executando apenas uma única ordem de cada vez e adicionei memória ao elevador na forma de filas, para que os pisos fossem percorridos na ordem em que foram pressionados, o que obviamente não é a melhor abordagem.
Então, no momento, estou usando uma lógica muito simples e "míope", que é: para o andar atual, encontre o andar mais próximo de mim e defina-o como meu próximo destino e faça um loop até que não haja mais andares na lista.
Mas isso nem sempre funciona, por exemplo, o elevador estava no 3º andar de um prédio de 5 andares e recebeu pedidos 4,5,2. O caminho mais curto seria 2-> 4-> 5, que custa 4 andares, mas usando essa lógica 4-> 5-> 2, que custa 5, tem a mesma chance de ser escolhido, dependendo do código.
Como faço para encontrar o caminho mais curto e tornar o elevador mais eficiente?