Camino minimo en floyd!

Iniciado por Dashiel, 8 Julio 2013, 09:57 AM

0 Miembros y 2 Visitantes están viendo este tema.

Dashiel

Estoy intentando hacer el metodo de camino minimo en floyd, pero realmente me he trabado.
Si alguien pudiera ayudarme con algun código más menos entendible se los agradecería!

eferion

Te has trabado... donde exactamente??

Si quieres ayuda es un buen paso poner el código que tienes, comentar qué problemas tienes, cosas así...

Dashiel

Bueno ahora mismo estoy intentando terminar el codigo, guiandome por un seudocodigo.
En cuanto tenga algo coherente y logico lo subo ,
Es decir dentro de unos minutos
jee
gracias!

Dashiel

#3
Código (cpp) [Seleccionar]
Bueno esto fue lo que hice, soy de cuba y aqui son las 4 y media am ... ya no genero nada bueno ... asi que no se si funcione a o no!
template<class T>
CaminoMinimoFloyd( T * V1, T * V2 )  // T se refiere a clase template.
{
  ListaSE<T>* lista = new ListaSE<Tipo>;  //ListaSE es lista simplemente enlazada!  
  ListaSE<T>* aux1;
  ListaSE<T>* aux2;
  T * VertComun; // seria el vertice B en AB + BC ;
  int pos1 = Buscar (V1);
  int pos2 = Buscar (V2);
  if ( matrizP [pos1] [pos2] == null) // [color=red]mi matriz de predecesores va a tener dentro los vertices. y no la posicion del vertice.[/color]
           {
              lista -> Adicionar (V1);
              lista -> Adicionar (V2);
           }
         else
           {
            VertComun = matrizP[pos1][pos2];
            aux1 = CaminoMinimoFloyd (V1, VertComun);
            aux2 = CaminoMinimoFloyd (VertComun, V2) ;
            for(int i = 0; i < aux1->Longitud()-1; i++)
                lista ->Adicionar (aux1->Obtener(i)); // [color=red]agregó los elemento a la lista a retornar. Le doy longitud menos 1 para que en el for siguiente no agregue de nuevo el mismo elemento. sino quedaria ej: ABBC.[/color]
           
            for(int j = 0; j < aux2->Longitud(); j++)
                 lista ->Adicionar (aux2->Obtener(j))

            }
return lista;

}

eferion

Para que el texto sea legible, edita tu mensaje, selecciona todo el código y en el combobox donde pone GeSHi selecciona c++.

Y tampoco estaría mal que indicases qué tipo de clase es ListaSE... es un alias de vector, de set o de list... es una clase tuya propia que te has currado de cero... no sabes que hace eso ahi ( XDDD ) ???

Luego, entiendo que la función esa es un template, no?? si es template, para evitar dudas estaría bien que pusieses la declaración del template... en caso contrario ( espero que no ) tienes una clase llamada T... cambia el nombre de esa clase porque es usada para templates y puede dar lugar a confusiones.

Más cositas... CaminoMinimoFloyd es una función, por lo que para llamarla hay que encerrar los parámetros entre paréntesis y tu estás usando corchetes... esto directamente no compila, deberías corregir esos errores antes de reportar código... queda feo.

Y bueno, corrige esas tonterías y luego seguimos.

Dashiel

Cita de: eferion en  8 Julio 2013, 11:19 AM
Para que el texto sea legible, edita tu mensaje, selecciona todo el código y en el combobox donde pone GeSHi selecciona c++.

Y tampoco estaría mal que indicases qué tipo de clase es ListaSE... es un alias de vector, de set o de list... es una clase tuya propia que te has currado de cero... no sabes que hace eso ahi ( XDDD ) ???

Luego, entiendo que la función esa es un template, no?? si es template, para evitar dudas estaría bien que pusieses la declaración del template... en caso contrario ( espero que no ) tienes una clase llamada T... cambia el nombre de esa clase porque es usada para templates y puede dar lugar a confusiones.

Más cositas... CaminoMinimoFloyd es una función, por lo que para llamarla hay que encerrar los parámetros entre paréntesis y tu estás usando corchetes... esto directamente no compila, deberías corregir esos errores antes de reportar código... queda feo.

Y bueno, corrige esas tonterías y luego seguimos.



Ya , y disculpa se me fueron todos esos errorcitos bobos, hechemosle la culpa al sueño.
XDDDD

eferion

Cita de: Dashiel en  8 Julio 2013, 11:40 AM
Ya , y disculpa se me fueron todos esos errorcitos bobos, hechemosle la culpa al sueño.
XDDDD

Te lo digo sin maldad, son detalles a pulir.

Tu piensa que cuanto mejor sea tu presentación y más facilites la vida a los que te van a ayudar, más productivo será para todos, en especial para ti.

Dashiel

Cita de: eferion en  8 Julio 2013, 11:43 AM
Te lo digo sin maldad, son detalles a pulir.

Tu piensa que cuanto mejor sea tu presentación y más facilites la vida a los que te van a ayudar, más productivo será para todos, en especial para ti.



Si, anoche me fui a dormir , no daba más. Es que soy nuevo por este foro y aun ando aprendiendo estas cosas de edición. Bueno alguien ha podido verificar si el código sirve o trazearlo?

eferion

Es complicado que alguien pruebe tu código porque usas la clase ListaSE que es particular tuya...si fuese un contenedor de la stl la cosa cambiaría... pero el comportamiento de ListaSE no se puede predecir viendo tu código.

Cualquier detalle tontos puede hacer que la ejecución del programa sea radicalmente distinta.

Tu piensa siempre que hacer un programa es como montar un reloj... todos los engranajes tienen que funcionar en perfecta armonía porque en caso contrario el invento no funciona.

Y tocando ahora tu código... me he mirado un poco la especificación de lo que tiene que hacer tu algoritmo y... yo creo que vas mal encaminado.

Para empezar, se supone que tiene que haber una función CaminoMinimo(i,j,k) o, en su defecto, tres bucles para iterar sobre el grafo... y tu estás usando únicamente 2 variables... lo mismo se me pasa algo, ya te digo, no puedo probarlo, pero lo veo raro.

También te digo que el diseño del algoritmo se puede resumir en una decena de líneas ( al menos las implementaciones que he visto )

Dashiel

Hola amigo!
Mira ListaSE es lista simplemente enlazada, Es una lista que se crea basada con nodo simplemente enlazados para poder hacer las operaciones en listas mas faciles y rapidas. Al menos aqui en mi universidad se usa mucho junto con lista doblemente enlazada.( esta ultima aun es mas rapida pues permite a los nodos en los que se basa la lista regresar al anterior.

Mi profe de programación ya me analizó el código, el codigo esta perfecto. A no ser que se me haya ido algun ; algo jejej... es decir la logica del codigo es asi. Pues lo que hice fue un algoritmo recursivo para ir llenando las listas. Si tienes un chance y mira algo del funcionamiento de floyd, que lo que hace es actualizar una matriz de predecesores y en esa matriz buscar  el camino se hace recursivamente a medida que las vas mirando ( es decir sin ningun tipo de código)
Amigo muchísimas gracias de veras y espero poder seguir ayudandonos. Ahh se me olvidaba soy estudiante cubano de ingenieria en informatica... Ahora es que empiezo por este mundo enorme de la programación
Saludos!