#include <iostream>
using namespace std;//<--------No eh podido entender para que sirve esto del namespace
class string
{       
  char String [20];
  //friend class grafo;
};
class arco;
class vertice                  //Clase que define la estructura de los vertices.
{
  /*vertice(string name = "", vertice *sig = NULL, arco next = NULL)
  {
    sigv = sig;
    sigarco = next;
    nombre = name;
    ubicacion = "";
  }*/ //TENGO PROBLEMAS AQUI CON LOS CONSTRUCTORES DE LAS CLASES,¿QUE ESTOY HACIENDO MAL?
  // Y POR ESO TENGO A TODOS MIS CONSTRUCTORES DE CLASES COMENTADOS.
   //private:
    int llave;
    vertice *sigv;
    arco *sigarco;
    string nombre;   //  AQUI Y
    string ubicacion;  //AQUI ESTAN DOS ERRORES QUE NO COMPRENDO.
    
  friend class grafo;
};
typedef vertice *pvertice; 
class arco            //Clase que define la estructura del arco o arista.
{  
  /*arco(int p, int b, int d, arco siga = NULL)
  { //ESTE SEGMENTO ESTA COMENTADO PORQUE ALGO ESTOY HACIENDO MAL AQUI, NO ME SIRVE
    peso = p;
    sigArco = siga;
    backbond = b;
    distancia = d;
  }*/
  //private:
    int peso;
    arco *sigArco;
    int backbond;
    int distancia;
  
  friend class grafo;
};
typedef arco *p_arco; 
class grafo
{
  /*grafo()
  {
    privertice = vertice_act = NULL;
    priarco = arco_act = NULL;
  }*/
  //~grafo(); //NO COMPRENDO BIEN LA FUNCION DE UN DESTRUCTOR DE LA CLASE
  public:
    void menu_principal();
    void nuevo_vertice();
    void nuevo_Arco();
    void modif_Arco();
    void modif_vertice();
    void arbol_de_expancion_minima();
    void Imprimir_grafo_en_amplitud();
    void Imprimir_grafo_en_profundidad();
    void grados_de_cada_vertice
    void grado_Interno();                
    void grado_Externo();
    void rutas_alternativas();
    void rutas_mas_directas();
    void Backbone();
    void vertices_conexos();
  private:
    pvertice privertice;
    pvertice vertice_act;
    p_arco priarco;
    p_arco arco_act;
};