Cómo resolver el problema ALCATRAZ3 (The honeycomb maze) en SPOJ

Básicamente, la solución parece ser obvia si visualizamos el laberinto como un gráfico que tiene [matemática] N * M [/ matemática] número de nodos y cada celda [matemática] (i, j) [/ matemática] tiene bordes no dirigidos con celdas vacías vecinas, es decir, celdas [matemáticas] (i, j + 1), (i, j-1), (i + 1, j), (i-1, j). [/ matemáticas]

Ahora comenzamos desde la celda inicial dada y encontramos todos los ciclos que terminan en la misma celda. En el caso, podemos encontrar un ciclo de longitud> = k, luego concluimos la respuesta como “SÍ”, de lo contrario “NO”.

Por lo tanto, la pregunta se reduce a encontrar todos los ciclos posibles en un gráfico que comienza y termina en un nodo dado. Esto se puede lograr mediante un DFS (Profundidad primera búsqueda) . Por supuesto, la complejidad temporal de esta solución podría ser exponencial en el peor de los casos, pero los casos de prueba de este problema en particular nunca exploran el peor de los casos y la solución basada en DFS es aceptable para este problema.

Referencia : ¿Cómo podemos encontrar todos los ciclos simples en un gráfico no dirigido de manera eficiente? ¿Cómo encuentro los puntos que forman un ciclo en un gráfico?

Pensándolo bien, puedo decir que no hay una solución alternativa posible que pueda dar la respuesta en tiempo polinómico. De hecho, si existiera la solución de la complejidad del tiempo polinomial, el problema del ciclo de Hamilton también podría resolverse en el tiempo polinomial, que de hecho es un problema NP-Hard a partir de ahora.

Eche un vistazo a este código de CA para saber cómo aplicar dfs a este problema.

More Interesting

Cómo ordenar diagonales de una matriz 2D de manera eficiente

Cómo definir una función para encontrar el producto de dígitos en Python usando recursividad

Cómo escribir un programa C # para implementar un algoritmo de programación SRTF (el tiempo restante más corto primero), junto con la visualización del diagrama de Gantt

¿Cuál de los enfoques (conexionismo, evolutivo, bayesiano, etc.) tendrá la mejor oportunidad de desarrollar un algoritmo maestro de IA?

Cómo eliminar un elemento específico y reducir el tamaño de una matriz en Java

¿Cuál es el algoritmo de cifrado más complejo?

Cómo resolver este problema con un árbol de segmentos o BIT

¿Cuál es el elemento más pequeño / más grande en el código Java?

¿Qué curso de Udemy es mejor para aprender estructuras de datos si ya he aprendido los conceptos básicos (matrices, estructuras, punteros, listas enlazadas)?

Si pudiera romper el algoritmo RSA, ¿lo mantendría en secreto?

¿Es posible el algoritmo de compresión que se muestra en Silicon Valley en realidad?

Cómo hacer un proyecto de chatbot

¿Es posible codificar un algoritmo de manera que cuando se proporciona una imagen de entrada y la ropa que una persona usa en la imagen se recorta y compara con una imagen en una base de datos y sale con la coincidencia exacta / coincidencia más cercana?

Cómo resolver esta relación de recurrencia usando el método de sustitución

Cómo imprimir todas las permutaciones de una cadena tanto de forma iterativa como recursiva