Ejemplo n.º 1
0
        /* Funcion: AristaCosteMinimo
         * Descripcion: Dado un vertice, un conjunto y la matriz de adyacencia, encontrar la arista que une el vertice
         *              con un elemento del conjunto que tenga la arista de coste minimo
         * Parametros: int u: varia de tipo int que guarda el origen
         *             Conjunto<int> W: Conjunto de vertices que aun no hemos recorrido
         *             int [,] aristas: matriz de adyacencia
         * Salida: Una variable de tipo AristaCosteMinimo donde u, es el origen, elemento de W es el destino y el coste de la
         *         arista de coste minimo.
         */
        public static AristaGrafo AristaCosteMinimo(int u, Conjunto <int> W, int [,] aristas)
        {
            /*buscar dentro de la matriz de aristas*/
            AristaGrafo arista = new AristaGrafo(9999, 9999, 9999);   /*Inicializo la arista*/
            int         j      = 0;

            for (int i = 0; i < W.Elementos(); i++) /*numero de vueltas que tengo que dar para comprobar todos*/
            {
                while (W.Contiene(j) == false)      /*encuentro el elemento*/
                {
                    j++;
                }

                if (arista.get_Coste() > aristas[u, j]) /*modifico la arista en caso de ecnontrar alguna que tenga un coste mas pequenyo*/
                {
                    arista.set_Coste(aristas[u, j]);    /*actualizo el coste de la arista*/
                    arista.set_Origen(u);               /*actualizo el origen de la arista*/
                    arista.set_Destino(j);              /*actualizo el destino de la arista*/
                }
                j++;                                    /*actualizo la variable que marca el elemento*/
            }

            return(arista);  /*se devuelve la arista*/
        }
Ejemplo n.º 2
0
        /* Funcion: AristaCosteMinimo
         * Descripcion: a traves de un vertice, el conjunto de vertices que aun no hemos visitado, la matriz de adyacencia para poder
         *              acceder a los costes de las aristas y el array de grados de cada vertice. Obtenemos la arista de coste minimo
         *              y que el vertice destino no tenga un grado mayor de dos
         * Parametros:  int u: variable de tipo int que guarda el origen
         *              Conjunto<int> W: Conjunto de vertices que aun no hemos recorrido
         *              int[,] aristas: matriz de adyacendia
         *              int [] grado: array de que guarda los grados de los vertices
         *
         */
        public static AristaGrafo AristaCosteMinimo(int u, Conjunto <int> W, int[,] aristas, int[] grado)
        {
            /*buscar dentro de la matriz de aristas*/
            AristaGrafo arista = new AristaGrafo(9999, 9999, 9999);
            int         j      = 0;

            for (int i = 0; i < W.Elementos(); i++)     /*Buscamos todas las posibles soluciones*/
            {
                while (W.Contiene(j) == false)          /*buscamos el elemento*/
                {
                    j++;
                }

                if (arista.get_Coste() > aristas[u, j] && grado[j] < 2) /*Comparamos el coste y el grado del vertice*/
                {
                    arista.set_Coste(aristas[u, j]);                    /*actualizamos el coste de la arista*/
                    arista.set_Origen(u);                               /*actualizamos el origen de la arista*/
                    arista.set_Destino(j);                              /*actualizamos el destino de la arista*/
                }
                j++;                                                    /*actualizamos la posisicon para poder seguir buscando elementos*/
            }

            return(arista);      /*se devuelve la arista*/
        }