Aquí está la implementación más genérica que uso:
#include
#include
utilizando NodeIndexType = char;
usando EdgeValueType = int;
- ¿Cómo reconocen los programas el nombre usando el procesamiento del lenguaje natural?
- ¿Cuál es la complejidad del tiempo de un algoritmo?
- Cómo saber cuándo usar .add o .put para agregar a una matriz en Java
- ¿Puedes escribir y resolver algoritmos en JavaScript?
- ¿Qué es recursivo en matemáticas?
usando Graph = std :: unordered_map <NodeIndexType, std :: unordered_map >;
int main () {
Gráfico g;
g [‘a’] [‘b’] = 1; // nueva arista de a a b, los nodos a y b se crearán implícitamente
g [‘a’] [‘a’] = 5;
g [‘b’] [‘c’] = 0;
for (auto const & element: g) {
auto const & node = element.first;
auto const & edge = element.second;
std :: cout << "Nodo" << nodo << ":";
para (const automático y borde: bordes) {
auto const & neighbour = edge.first;
auto const & value = edge.second;
std :: cout << "(" << vecino << "," << valor << ") |";
}
std :: cout << '\ n';
}
}
Esta es la misma representación que la representación matricial clásica (matriz 2D donde a [i] [j] es la distancia de i a j).
Hay algunas ventajas y desventajas en comparación con la representación matricial (¡más lenta pero con menos memoria!), Pero resulta que se vuelve muy eficiente cuando se trata de gráficos dispersos (es decir, GeoRouting).
Si desea un gráfico no ponderado, convierta el mapa interno sin ordenar en un conjunto sin ordenar.