예제 #1
0
        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);
            }
        }
예제 #2
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);
        }
예제 #3
0
//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))
					{
예제 #4
0
//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++)
								{
예제 #5
0
        public void desConectar(Vertice <T> origen, Vertice <T> destino)
        {
            Arista <T> arista = origen.getAdyacentes().Find(a => a.getDestino().Equals(destino));

            origen.getAdyacentes().Remove(arista);
        }
예제 #6
0
        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"));
        }
예제 #7
0
//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;

		}