// Los grafos pequeños de los apuntes.
#ifndef SAMPLE_GRAPHS_H
#define SAMPLE_GRAPHS_H

#include <iostream>
#include <vector>

#include "graph.h"

// El grafo de la clase de la semana 14, ahora con pesos.
inline Graph weighted_class_graph() {
    Graph graph(7);
    graph.add_edge(0, 1, 2);
    graph.add_edge(0, 2, 9);
    graph.add_edge(1, 3, 1);
    graph.add_edge(2, 3, 1);
    graph.add_edge(2, 4, 2);
    graph.add_edge(3, 5, 8);
    graph.add_edge(4, 5, 1);
    graph.add_edge(5, 6, 3);
    return graph;
}

// El contraejemplo de los apuntes. Dirigido: en uno no dirigido, una arista negativa ya es un ciclo.
inline Graph negative_edge_graph() {
    Graph graph(4, true);
    graph.add_edge(0, 1, 2);
    graph.add_edge(0, 2, 3);
    graph.add_edge(2, 1, -2);
    graph.add_edge(1, 3, 1);
    return graph;
}

inline void print_nodes(const std::vector<int>& nodes) {
    for (std::size_t i = 0; i < nodes.size(); i++) {
        std::cout << (i == 0 ? "" : " ") << nodes[i];
    }
    std::cout << "\n";
}

#endif
