esto debería ser un algoritmo más bien fácil de implementar.
Para empezar, separa las carreteras en conjuntos distintos, donde todos los segmentos de la carretera en cada conjunto están de alguna manera conectados. Hay varios métodos sobre cómo hacer esto, pero aquí está uno:
- Elige un segmento de carretera al azar, añadirlo a un conjunto, y se marca
- sucursal fuera de este segmento, es decir. seguir los segmentos conectados en ambas direcciones que no están marcados (si están marcados, ya hemos estado aquí)
- Si el segmento de carretera encontrado no está aún en el conjunto, agréguelo y márquelo
- Continuar desde segmentos nuevos hasta que no pueda encontrar más segmentos sin marcar que están conectados a los que están actualmente en el conjunto
- Si quedan segmentos sin marcar, son parte de un nuevo conjunto, elija uno aleatorio y comience de nuevo con 1 con otro conjunto
Nota: De acuerdo con la Catan Rules oficial, un camino puede romperse si ano ther play construye un asentamiento en una unión entre dos segmentos. Debe detectar esto y no pasar del acuerdo.
Nota: en los pasos anteriores y siguientes, solo tenga en cuenta los segmentos de reproductores actuales. Puede ignorar esos otros segmentos como si ni siquiera estuvieran en el mapa.
Esto le proporciona uno o más conjuntos, cada uno con uno o más segmentos de carretera.
Ok, para cada conjunto, haga lo siguiente:
- Escoja un segmento de carretera al azar en el conjunto que tiene sólo un segmento de carretera conectado hacia fuera de él (es decir.tienes que elegir un punto final)
- Si no puede hacer eso, entonces todo el conjunto es un bucle (uno o más), por lo que elegir un segmento de azar en este caso
Ahora, desde el segmento que eligió, realice una búsqueda recursiva de bifurcación en profundidad, haciendo un seguimiento de la longitud de la carretera actual que ha encontrado hasta ahora. Marque siempre los segmentos de la carretera también, y no bifurque en los segmentos ya marcados. Esto permitirá que el algoritmo se detenga cuando "come su propia cola".
Cuando necesite retroceder, porque no hay más ramas, tome nota de la longitud actual, y si es más larga que el "máximo anterior", almacene la nueva longitud como máximo.
Haga esto para todos los juegos, y debe tener el camino más largo.
espero que no está buscando nada realmente eficiente, camino más largo es conocido por ser NP-completo! –
He estado comprobando esto, pero analizaría las matrices de Adyacencia. Hubiera publicado una respuesta diciendo esto, pero no he podido buscar un algoritmo para la ruta no cíclica más larga. Además, con el número de carreteras en un mapa de Settlers, puede ser algo complicado, especialmente si tiene diferentes tamaños de mapa para múltiples jugadores. –
@ Jan: Me decepcionó cuando descubrí que el camino más largo es NP-completo, pero pensé que la especificidad del problema produciría algunas optimizaciones que permitieran resolverlas en un tiempo polinomial o mejor. – Jay