He hecho algunas pruebas sobre esto, y el mejor enfoque que encontré fue incluir el estado abierto / cerrado / visitado como una enumeración en el nodo de búsqueda en sí. Esto requiere un pase claro, pero en mis pruebas el aumento de velocidad al tener acceso directo a ese campo lo compensó en el peor de los casos.
Aquí está mi nodo de búsqueda de muestra para aclaración. (La lista conectada estaba implícita en una estructura de cuadrícula, por lo que no verá las conexiones enumeradas aquí).
clase pública GridNode
{
Estado de enumeración pública
{
CLEAR, // este nodo se puede usar para viajar a través de
BLOQUEADO // este nodo está bloqueado
}
Estado público m_status;
Punto público m_coord;
flotador público m_cost;
- ¿Cuáles son las diferencias entre DFS y BFS?
- ¿Cuál es la complejidad temporal de la solución del problema del vendedor ambulante mediante la optimización de colonias de hormigas?
- ¿Dónde puedo conectarme en línea para estudiar estructuras de datos, como árboles de búsqueda binarios, montones, etc.?
- Cómo encontrar a alguien que pueda implementar un algoritmo de enrutamiento de vehículos que se nos ocurrió
- ¿Por qué los estudiantes chinos tienen un talento extraordinario en programación y algoritmos?
// estos son solo para búsqueda (solo para uso interno)
enumeración pública SearchState
{
NO USADO,
ABIERTO,
CERRADO
}
searchState público m_searchState; // ¿este nodo está abierto o cerrado?
public GridNode m_from; // el camino hacia este punto vino desde aquí
flotador público m_costSoFar; // G para A *
flotante público m_costEstimate; // F para A *
Public GridNode (int x, int y)
{
m_status = Status.CLEAR;
m_coord = nuevo punto (x, y);
m_cost = 1.0f;
m_searchState = SearchState.OPEN;
m_from = nulo;
m_costSoFar = 0.0f;
m_costEstimate = 0.0f;
}
}