/* 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*/ }
/* 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*/ }