fundo
Eu estava jogando o jogo para PC "Darkest Dungeon" recentemente. No jogo, você precisa explorar as masmorras, que consistem em salas conectadas, como mostrado na figura abaixo.
Aqui estão as regras:
- Você começa em sala fixa (entrada). Você não pode escolher por onde começar.
- O objetivo é visitar todos os quartos pelo menos uma vez
- A distância entre os quartos adjacentes é a mesma para todos os quartos.
- Você pode visitar quartos e percorrer caminhos sempre que desejar
Questão
Qual é o caminho mais curto desde a entrada que visita todos os quartos pelo menos uma vez?
Subquestões:
- Que algoritmo (s) poderia ser usado para resolver este problema?
- Existem implementações gratuitas (e bastante simples) para serem usadas por alguém como eu?
O que eu tentei
Encontrei outras perguntas como esta ou esta sem encontrar uma resposta. Estou familiarizado com o TSP (básico) e sou capaz de codificar e resolver TSPs simples. Os caminhos hamiltonianos não resolveram meu problema, porque não permitem várias visitas. O problema do carteiro chinês também não se aplica aqui em sua forma básica, porque não preciso visitar todos os cantos.
Atualizar
Como afirmei nos comentários, não sou cientista da computação e não estou interessado em provar declarações matemáticas (talvez eu deva postar esta pergunta no stackoverflow posteriormente). Além disso, não sou programador e as chances de codificar uma solução são muito pequenas. Mas suspeito que não sou o primeiro a lidar com um problema dessa natureza.
De acordo com @Shreesh e @Dib, o seguinte procedimento pode ser aplicado:
- Crie uma matriz de distância aos pares com todas as salas, adicionando arestas entre todas as salas.
- Resolva o TSP usando um solucionador padrão (por exemplo, concorde)
- A partir da entrada, visite todos os quartos de acordo com a solução. Para salas não adjacentes, substitua a menor distância entre essas salas.
Este procedimento fornecerá a resposta para o problema?