void build_test_graph(Grafo & g)
{
  g.insert_node("A");
  g.insert_node("B");
  g.insert_node("C");
  g.insert_node("D");
  g.insert_node("E");
  g.insert_node("F");
  g.insert_node("G");
  g.insert_node("H");
  g.insert_node("I");

  insertar_arco(g, "A", "B", 2);
  insertar_arco(g, "A", "F", 5);
  insertar_arco(g, "B", "F", 1);
  insertar_arco(g, "B", "D", 3);
  insertar_arco(g, "C", "A", 1);  
  insertar_arco(g, "C", "E", 4);  
  insertar_arco(g, "F", "D", -2);
  insertar_arco(g, "F", "C", -1);
  insertar_arco(g, "F", "E", 2);
  insertar_arco(g, "D", "F", 2);
  insertar_arco(g, "D", "H", 4);
  insertar_arco(g, "E", "G", 2);
  insertar_arco(g, "E", "I", -2);
  insertar_arco(g, "G", "D", 3);
  insertar_arco(g, "G", "F", -1);
  insertar_arco(g, "G", "H", 2);
  insertar_arco(g, "H", "D", -2);
  insertar_arco(g, "H", "G", -1);
  insertar_arco(g, "I", "G", 4);
  insertar_arco(g, "I", "H", 3);

}
void crear_arco(Grafo & g, int isrc, int itgt)
{
  Grafo::Node * src = g.search_node(isrc);
  if (src == NULL)
    src = g.insert_node(isrc);

  Grafo::Node * tgt = g.search_node(itgt);
  if (tgt == NULL)
    tgt = g.insert_node(itgt);

  if (search_arc<Grafo>(g, src, tgt) != NULL)
    throw std::invalid_argument("Duplicated arc");

  g.insert_arc(src, tgt);
}
void insertar_arco(Grafo &        grafo, 
		   const string & src_name, 
		   const string & tgt_name)
{
  Grafo::Node * n1 = grafo.search_node(Nodo(src_name));

  if (n1 == NULL)
    n1 = grafo.insert_node(src_name);

  Grafo::Node * n2 = grafo.search_node(Nodo(tgt_name));

  if (n2 == NULL)
    n2 = grafo.insert_node(tgt_name);

  grafo.insert_arc(n1, n2);
}
void build_test_graph_1(Grafo & g)
{
  g.insert_node(Nodo("E"));

  insertar_arco(g, "A", "B");
  insertar_arco(g, "A", "D");
  insertar_arco(g, "B", "C");
  insertar_arco(g, "C", "A");
  insertar_arco(g, "D", "E");
  insertar_arco(g, "E", "B");
  insertar_arco(g, "E", "D");

  insertar_arco(g, "E", "G");

  insertar_arco(g, "G", "F");
  insertar_arco(g, "F", "G");

  insertar_arco(g, "E", "H");

  insertar_arco(g, "H", "I");

  insertar_arco(g, "I", "J");
  insertar_arco(g, "J", "K");
  insertar_arco(g, "K", "I");
}
void insertar_arco(Grafo &       grafo, 
		  const string & src_name, 
		  const string & tgt_name,
		  const double & distancia)
{
  Grafo::Node * n1 = grafo.find_node(Nodo(src_name));

  if (n1 == NULL)
    n1 = grafo.insert_node(src_name);

  Grafo::Node * n2 = grafo.find_node(Nodo(tgt_name));

  if (n2 == NULL)
    n2 = grafo.insert_node(tgt_name);

  grafo.insert_arc(n1, n2, Arco(distancia));
}
Grafo * build_graph()
{
  Grafo * g = new Grafo;

  for (int i = 'A'; i <= 'P'; ++i)
    g->insert_node(new Grafo::Node(i));

  insertar_arco(g, "A", "B", 3);
  //  insertar_arco(g, "B", "A", 3);
  insertar_arco(g, "B", "C", 4);
  insertar_arco(g, "C", "D", 3);
  insertar_arco(g, "D", "E", 4);
  insertar_arco(g, "E", "K", 2);
  insertar_arco(g, "K", "P", 7);
  insertar_arco(g, "P", "J", 1);
  insertar_arco(g, "J", "K", 4);
  insertar_arco(g, "K", "D", 5);
  insertar_arco(g, "D", "J", 2);
  insertar_arco(g, "J", "I", 2);
  //  insertar_arco(g, "I", "J", 2);
  insertar_arco(g, "I", "D", 1);
  insertar_arco(g, "I", "C", 2);
  insertar_arco(g, "I", "H", 2);
  insertar_arco(g, "H", "C", 3);
  insertar_arco(g, "H", "B", 7);
  insertar_arco(g, "B", "G", 1);
  insertar_arco(g, "B", "M", 15);
  //  insertar_arco(g, "M", "B", 3);
  insertar_arco(g, "M", "G", 10);
  insertar_arco(g, "G", "A", 4);
  insertar_arco(g, "A", "F", 9);
  insertar_arco(g, "F", "G", 5);
  insertar_arco(g, "F", "L", 10);
  insertar_arco(g, "F", "M", 12);
  insertar_arco(g, "H", "M", 8);
  insertar_arco(g, "L", "M", 4);
  insertar_arco(g, "M", "N", 2);
  insertar_arco(g, "N", "H", 3);
  insertar_arco(g, "N", "I", 1);
  insertar_arco(g, "N", "O", 3);
  insertar_arco(g, "O", "I", 3);
  insertar_arco(g, "O", "J", 1);
  insertar_arco(g, "O", "P", 6);

  return g;    
}
示例#7
0
void construir_grafo(Grafo & g)
{
  Grafo::Node * n1 = g.insert_node(_Node(1));
  Grafo::Node * n2 = g.insert_node(_Node(2));
  Grafo::Node * n3 = g.insert_node(_Node(3));
  Grafo::Node * n4 = g.insert_node(_Node(4));
  Grafo::Node * n5 = g.insert_node(_Node(5));
  Grafo::Node * n6 = g.insert_node(_Node(6));
  Grafo::Node * n7 = g.insert_node(_Node(7));
  Grafo::Node * n8 = g.insert_node(_Node(8));
  Grafo::Node * n9 = g.insert_node(_Node(9));
  Grafo::Node * n10 = g.insert_node(_Node(10));
  Grafo::Node * n11 = g.insert_node(_Node(11));
  Grafo::Node * n12 = g.insert_node(_Node(12));
  Grafo::Node * n13 = g.insert_node(_Node(13));
  Grafo::Node * n14 = g.insert_node(_Node(14));
  Grafo::Node * n15 = g.insert_node(_Node(15));
  Grafo::Node * n16 = g.insert_node(_Node(16));
  Grafo::Node * n17 = g.insert_node(_Node(17));
  Grafo::Node * n18 = g.insert_node(_Node(18));
  Grafo::Node * n19 = g.insert_node(_Node(19));
  Grafo::Node * n20 = g.insert_node(_Node(20));
  Grafo::Node * n21 = g.insert_node(_Node(21));
  Grafo::Node * n22 = g.insert_node(_Node(22));
  Grafo::Node * n23 = g.insert_node(_Node(23));
  Grafo::Node * n24 = g.insert_node(_Node(24));
  Grafo::Node * n25 = g.insert_node(_Node(25));
  Grafo::Node * n26 = g.insert_node(_Node(26));
  Grafo::Node * n27 = g.insert_node(_Node(27));
  Grafo::Node * n28 = g.insert_node(_Node(28));

  insertar_arco(g, n1, n2);
  insertar_arco(g, n1, n3);
  insertar_arco(g, n1, n7);
  insertar_arco(g, n1, n14);
  insertar_arco(g, n1, n21);
  insertar_arco(g, n1, n22);

  insertar_arco(g, n7, n8);
  insertar_arco(g, n7, n12);
  insertar_arco(g, n7, n10);
  insertar_arco(g, n8, n10);
  insertar_arco(g, n8, n9);
  insertar_arco(g, n9, n10);
  insertar_arco(g, n9, n13);
  insertar_arco(g, n10, n11);
  insertar_arco(g, n10, n12);
  insertar_arco(g, n10, n13);
  insertar_arco(g, n11, n13);
  insertar_arco(g, n11, n12);

  insertar_arco(g, n2, n5);
  insertar_arco(g, n2, n4);
  insertar_arco(g, n5, n4);
  insertar_arco(g, n5, n6);
  insertar_arco(g, n6, n4);
  insertar_arco(g, n6, n3);
  insertar_arco(g, n3, n4);

  insertar_arco(g, n14, n15);
  insertar_arco(g, n14, n17);
  insertar_arco(g, n14, n16);
  insertar_arco(g, n17, n20);
  insertar_arco(g, n20, n19);
  insertar_arco(g, n19, n16);
  insertar_arco(g, n19, n18);
  insertar_arco(g, n18, n16);
  insertar_arco(g, n18, n15);

  insertar_arco(g, n21, n23);
  insertar_arco(g, n21, n22);
  insertar_arco(g, n22, n23);
  insertar_arco(g, n23, n28);
  insertar_arco(g, n23, n24);
  insertar_arco(g, n28, n24);
  insertar_arco(g, n24, n27);
  insertar_arco(g, n24, n25);
  insertar_arco(g, n28, n27);
  insertar_arco(g, n27, n25);
  insertar_arco(g, n25, n26);
  insertar_arco(g, n25, n27);
  insertar_arco(g, n26, n27);
}
void crear_grafo(Grafo & g)
{
  g.insert_node(1);
  g.insert_node(2);
  g.insert_node(3);
  g.insert_node(4);
  g.insert_node(5);
  g.insert_node(6);
  g.insert_node(7);
  g.insert_node(8);
  g.insert_node(9);
  g.insert_node(10);
  g.insert_node(11);
  g.insert_node(12);
  g.insert_node(13);
  g.insert_node(14);
  g.insert_node(15);
  g.insert_node(16);
  g.insert_node(17);
  g.insert_node(18);
  g.insert_node(19);
  g.insert_node(20);
  g.insert_node(21);
  g.insert_node(22);
  g.insert_node(23);
  g.insert_node(24);
  g.insert_node(25);
  g.insert_node(26);
  g.insert_node(27);

  crear_arco(g, 17, 6);
  crear_arco(g, 17, 12);
  crear_arco(g, 17, 18);
  crear_arco(g, 17, 23);
  crear_arco(g, 23, 12);
  crear_arco(g, 23, 18);
  crear_arco(g, 23, 24);
  crear_arco(g, 12, 6);
  crear_arco(g, 12, 7);
  crear_arco(g, 18, 12);
  crear_arco(g, 24, 18);
  crear_arco(g, 24, 19);
  crear_arco(g, 24, 25);
  crear_arco(g, 25, 18);
  crear_arco(g, 25, 12);
  crear_arco(g, 25, 19);
  crear_arco(g, 26, 15);
  crear_arco(g, 19, 12);
  crear_arco(g, 19, 13);
  crear_arco(g, 13, 12);
  crear_arco(g, 13, 6);
  crear_arco(g, 13, 7);
  crear_arco(g, 7, 6);
  crear_arco(g, 7, 1);
  crear_arco(g, 13, 8);
  crear_arco(g, 8, 7);
  crear_arco(g, 8, 1);
  crear_arco(g, 8,2 );
  crear_arco(g, 8, 3);
  crear_arco(g, 8, 9);
  crear_arco(g, 9, 4);
  crear_arco(g, 14, 13);
  crear_arco(g, 14, 8);
  crear_arco(g, 14, 3);
  crear_arco(g, 14, 19);
  crear_arco(g, 14, 25);
  crear_arco(g, 14, 20);
  crear_arco(g, 14, 15);
  crear_arco(g, 14, 9);
  crear_arco(g, 9, 3);
  crear_arco(g, 15, 9);
  crear_arco(g, 20, 26 );
  crear_arco(g, 20, 25);
  crear_arco(g, 20, 27);
  crear_arco(g, 20, 21);
  crear_arco(g, 20, 15);
  crear_arco(g, 15, 21);
  crear_arco(g, 21, 27);
  crear_arco(g, 21, 16);
  crear_arco(g, 21, 22);
  crear_arco(g, 15, 16);
  crear_arco(g, 15, 10);
  crear_arco(g, 10, 9);
  crear_arco(g, 10, 4);
  crear_arco(g, 10, 5);
  crear_arco(g, 10, 11);
  crear_arco(g, 10, 16);
  crear_arco(g, 16, 11);
  crear_arco(g, 16, 22);
  crear_arco(g, 16, 27);
  crear_arco(g, 27, 22);
  crear_arco(g, 22, 11);
  crear_arco(g, 11, 5);
  crear_arco(g, 5, 4);
  crear_arco(g, 5, 9);
  crear_arco(g, 4, 3);
  crear_arco(g, 3, 2);
  crear_arco(g, 2, 1);
  crear_arco(g, 2, 13);
  crear_arco(g, 2, 15);
  crear_arco(g, 2, 19);
  crear_arco(g, 2, 7);
  crear_arco(g, 1, 6);
  crear_arco(g, 25, 26);
  crear_arco(g, 26, 27);
  crear_arco(g, 26, 21);
}