public virtual int CompareTo(object arg0) { Arista <N> arista = (Arista <N>)arg0; if (arista.Peso > peso) { return(-1); } else if (arista.Peso < peso) { return(1); } else { return(0); } }
//Crea una arista entre dos vertices dados public void AgregarConexion(Vertice verticeInicial, Vertice verticeFinal, int peso) { //se crea una nueva arista con los parametros del metodo var arista = new Arista(peso, verticeInicial, verticeFinal); //Al vertice inicial y final se le avisan sus aristas verticeInicial.Aristas.Add(arista); verticeFinal.Aristas.Add(arista); //Se agregan los vertices y aristas a la lista del grafo para que sepa cuales tiene, se usa ExisteVertice que retorna un bool if (!ExisteVertice(verticeInicial)) { VerticesL.Add(verticeInicial); } if (!ExisteVertice(verticeFinal)) { VerticesL.Add(verticeFinal); } AristasL.Add(arista); }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: public GrafoM<N> KruskalGrafoMatriz(IGrafo<N> grafo) throws Excepciones.ExcepcionAristaImposible, Excepciones.ExcepcionNodoNoEncontrado public virtual GrafoM<N> KruskalGrafoMatriz(IGrafo<N> grafo) { GrafoM<N> graph = null; if (grafo.esDirigido()) { graph = new GrafoM<N>(true, true); } else { graph = new GrafoM<N>(false, true); } List<Arista<N>> aristas = grafo.generarAristas(); aristas.sort(null); List<N> nodos = grafo.darValorNodos(); for (int i = 0; i < nodos.Count; i++) { graph.agregarNodo(nodos[i]); } List<Conjunto<N>> conjuntos = new List<Conjunto<N>>(); for (int i = 0; i < nodos.Count; i++) { conjuntos.Add(new Conjunto<N>(nodos[i])); } for (int i = 0; i < aristas.Count && conjuntos.Count > 1; i++) { int n = conjuntos.Count; Arista<N> arista = aristas[i]; N nodo1 = arista.NodoInicial.Valor; N nodo2 = arista.NodoFinal.Valor; for (int j = 0; j < conjuntos.Count; j++) { if (conjuntos[j].existeNodoEnElConjunto(nodo1) && !conjuntos[j].existeNodoEnElConjunto(nodo2)) {
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: @Override public void agregarArista(N n1, N n2, System.Nullable<int> peso) throws Excepciones.ExcepcionAristaImposible public virtual void agregarArista(N n1, N n2, int? peso) { if (existeNodo(n1) && existeNodo(n2)) { if (esDirigido_Renamed) { bool c = false; for (int i = 0; i < nodos.Count && !c; i++) { if (nodos[i].Count > 0) { if (nodos[i].get(0).Valor.Equals(n1)) { c = true; bool c1 = false; for (int j = 0; j < nodos[i].Count && !c1; j++) { if (nodos[i].get(j).Valor.Equals(n2)) { c1 = true; } } if (!c1) { nodos[i].AddLast(new Nodo<N>(n2)); Arista<N> arista = new Arista<N>(new Nodo<N>(n1), new Nodo<N>(n2), peso.Value); aristas.Add(arista); } } } } } else { int n = 0; while (n < 2) { if (n == 1) { N n3 = n1; n1 = n2; n2 = n3; } bool c = false; for (int i = 0; i < nodos.Count && !c; i++) { if (nodos[i].get(0).Valor.Equals(n1)) { c = true; bool c1 = false; for (int j = 0; j < nodos[i].Count && !c1; j++) {
public void desConectar(Vertice <T> origen, Vertice <T> destino) { Arista <T> arista = origen.getAdyacentes().Find(a => a.getDestino().Equals(destino)); origen.getAdyacentes().Remove(arista); }
static void Main(string[] args) { //Grafo Generico string opc = null; GrafoObject <Colonias, Informacion> gGenerico = new GrafoObject <Colonias, Informacion>(); List <Colonias> listaColonias = new List <Colonias>(); gGenerico.ConexionRepetidaEventHandler += (obj, arg) => { Console.WriteLine(arg.Mensaje + "\n¿Deseas modificar su peso con el que acabas de dar? (s/n)"); string res = Console.ReadLine(); if (res.Equals("s")) { //int costo = int.Parse(Console.ReadLine()); Arista <Informacion, Colonias> arista = obj as Arista <Informacion, Colonias>; arista.Objeto = arg.Peso as Informacion; Console.Write($"El nuevo peso de la conexion es: {arista.Objeto.CostoTraslado} "); } }; do { Console.WriteLine("Creacion de grafos genericos"); Console.WriteLine("a. Crear Colonia"); Console.WriteLine("b. Crear conexion entre colonias"); Console.WriteLine("c. Modificar conexion entre colonias"); Console.WriteLine("d. Mostrar conexiones"); Console.WriteLine("e. Salir"); Console.WriteLine("======================================================"); Console.Write("Selecciona una opcion: "); opc = Console.ReadLine(); Console.Clear(); switch (opc) { case "a": Console.Write("Ingresa el nombre de la colonia: "); string nombre = Console.ReadLine(); Console.Write("Ingresa el codigo postal de la colonia: "); string codPos = Console.ReadLine(); Console.Write("Ingresa el numero de poblacion de la colonia: "); int pobla = int.Parse(Console.ReadLine()); listaColonias.Add(new Colonias { Nombre = nombre, CodPostal = codPos, Habitantes = pobla }); Console.Clear(); Console.WriteLine("--------------------Creada!---------------------\n\n"); break; case "b": for (int i = 0; i < listaColonias.Count; i++) { Console.WriteLine($"{i+1}. {listaColonias[i]}"); } Console.Write("Ingrese el numero de la colonia incial: "); int nIni = int.Parse(Console.ReadLine()); Console.Write("Ingrese el numero de la colonia final: "); int nfin = int.Parse(Console.ReadLine()); Console.Write("Ingrese el Costo de traslado de las colonias: "); int costo = int.Parse(Console.ReadLine()); gGenerico.AgregarConexion(new Vertice <Colonias, Informacion>(listaColonias[nIni - 1]) , new Vertice <Colonias, Informacion>(listaColonias[nfin - 1]) , new Informacion { CostoTraslado = costo }); Console.Clear(); Console.WriteLine("--------------------Creada!---------------------\n\n"); break; case "c": break; case "d": Console.WriteLine("<==============> Conexiones <==============>\n"); gGenerico.ImprimirGrafo(); Console.WriteLine("\n\n--------------------------------------------"); break; case "e": Console.WriteLine("Adios"); break; default: Console.WriteLine("!!!!!!!!!!!!!!!!!! --Opcion no vaida-- !!!!!!!!!!!!!!!!!!\n\n"); break; } } while (!opc.Equals("e")); }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: public GrafoL<N> KruskalGrafoLista(IGrafo<N> grafo) throws Excepciones.ExcepcionAristaImposible public virtual GrafoL<N> KruskalGrafoLista(IGrafo<N> grafo) { GrafoL<N> graph = null; if (grafo.esDirigido()) { graph = new GrafoL<N>(true, true); } else { graph = new GrafoL<N>(false, true); } List<Arista<N>> aristas = grafo.generarAristas(); aristas.sort(null); List<N> nodos = grafo.darValorNodos(); for (int i = 0; i < nodos.Count; i++) { graph.agregarNodo(nodos[i]); } List<Conjunto<N>> conjuntos = new List<Conjunto<N>>(); for (int i = 0; i < nodos.Count; i++) { conjuntos.Add(new Conjunto<N>(nodos[i])); } for (int i = 0; i < aristas.Count && conjuntos.Count > 1; i++) { int n = conjuntos.Count; Arista<N> arista = aristas[i]; N nodo1 = arista.NodoInicial.Valor; N nodo2 = arista.NodoFinal.Valor; for (int j = 0; j < conjuntos.Count; j++) { if (conjuntos[j].existeNodoEnElConjunto(nodo1) && !conjuntos[j].existeNodoEnElConjunto(nodo2)) { Conjunto<N> c1 = conjuntos[j]; Conjunto<N> c2 = null; int l = -1; for (int h = 0; c2 == null && h < conjuntos.Count; h++) { if (conjuntos[h].existeNodoEnElConjunto(nodo2)) { c2 = conjuntos[h]; l = h; } } if (c2 != null) { c1.unirConjuntos(c2); conjuntos.RemoveAt(l); } } } if (n > conjuntos.Count) { graph.agregarArista(nodo1, nodo2, arista.Peso); } } return graph; }