Cómo definir una estructura de datos de gráfico dinámico en C ++ (un gráfico que tiene un número desconocido de vértices)

Aquí está la implementación más genérica que uso:

#include
#include

utilizando NodeIndexType = char;
usando EdgeValueType = int;

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.

Dibuje una tabla de antepasados ​​que conecte a todas las personas vivas del planeta. Pase la tarea a su primogénito en la naturaleza de los sucesores a un trono.

El gráfico es una función del tiempo con algunas incógnitas entre las que se encuentran:

. ¿Tus descendientes tendrán un primogénito?

. ¿Extrañarás a alguien al dibujar el gráfico?

En algunos momentos, la tabla tendrá un número de personas contadas. En los mismos momentos, el cuadro no incluirá a todos los recién nacidos ni registrará a las personas que acaban de morir.

Por otro lado, si desea un gráfico teórico, considere un gráfico que depende de una proposición no probada como P = NP. Digamos que G tiene un vértice si P = NP y G tiene 2 vértices si no P = NP. G tiene un número desconocido de vértices.

EDITAR: esto fue en respuesta a “¿Cómo hago un gráfico que tiene un número desconocido de vértices?”

More Interesting

¿Sigue siendo relevante el modelado de objetos, o se ha reemplazado hoy solo con datos y algoritmos?

¿De dónde debería comenzar a aprender el algoritmo? ¿Debería unirme a uno de los MOOC disponibles o leer libros como 'Introducción a los algoritmos'?

¿Qué algoritmos y estructuras de datos se utilizan más en problemas del mundo real y software de producción?

¿Por qué el orden de selección no se denomina orden de intercambio?

¿Cuáles son los posibles algoritmos utilizados en los juegos de carrera sin fin?

¿Qué métricas deberían usarse para crear una puntuación de confiabilidad automática para los artículos de Wikipedia?

¿Cuál es un libro alternativo más fácil de CLRS?

¿Cuál es la mejor manera de ordenar un terabyte de matriz de datos, cuando tiene RAM limitada (500k), y cada elemento de la matriz tiene un par de elementos de datos, de aproximadamente 1-10k cada uno?

¿Cuál es la optimización de un conjunto de antenas?

¿Se puede utilizar el aprendizaje automático para encontrar públicos objetivo para anuncios?

Cómo hacer para recolectar datos de entrenamiento para un algoritmo de aprendizaje automático

Cómo construir un algoritmo para un dron que debería aprender de sus comentarios

¿Cuál es la diferencia entre la recursión normal y la recursiva de la cola con ejemplos?

¿Cuáles son las ventajas y desventajas de la búsqueda A * y el algoritmo de Dijkstra? ¿Cuándo se debe usar cada uno?

¿Hay alguna matemática recientemente descubierta (últimos 50 años) comprensible para estudiantes de pregrado o está todo muy avanzado?