public Grafo(Vertice[] Vertices, Arista[] Aristas, bool EstaEstructurado = false) { mVertices = Vertices; mAristas = Aristas; if (EstaEstructurado) { foreach (Vertice Vertice in mVertices) { foreach (Arista Arista in mAristas) { if (Vertice.AristaValida[Arista] && !Vertice.Aristas.Contains(Arista)) { Vertice.AñadirArista(Arista); } } } } }
public static Recorrido Concatenar(Recorrido R1, Recorrido R2) { Vertice[] Retorno = new Vertice[R1.Longitud + R2.Longitud - 1]; if (R1.Grafo == R2.Grafo) { for (int i = 0; i <= Retorno.GetUpperBound(0); i++) { if (i <= R1.Vertices.GetUpperBound(0)) { Retorno[i] = R1.Vertices[i]; } else { Retorno[i] = R2.Vertices[i - R1.Vertices.GetUpperBound(0)]; } } return new Recorrido(R1.Grafo, Retorno); } else { throw new ExcepcionDiscreta("RECORRIDO(CONCATENAR): No se pueden concatenar dos recorridos de grafos diferentes"); } }
public Grafo(long NumeroVertices, params Arista[] Aristas) { if (NumeroVertices > 0) { mNumeroVertices = NumeroVertices; mAristas = Aristas; mVertices = new Vertice[mNumeroVertices]; for (int i = 0; i <= mNumeroVertices - 1; i++) { mVertices[i] = new Vertice(i); foreach (Arista Arista in mAristas) { if (mVertices[i].AristaValida[Arista]) { mVertices[i].AñadirArista(Arista); } } } } else { throw new ExcepcionDiscreta("GRAFO (NEW): Un grafo debe tener a menos un vertice" + Constants.vbNewLine + "NumeroVertices=" + NumeroVertices.ToString()); } }