Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Dashiel

#1
Aqui te dejo un codigo del algoritmo de floyd para usar facil t rapido ,,
solo te faltaria inicializar las matrices D (costo) y P (predecesores) que es muy sencilo o pasarlas como referencia ...
la cantidad es la cantidad maxima de la matriz que creastes!


Código (cpp) [Seleccionar]
Void Floyd()
   {
     for(int i=0; i< cantidad;i++)
      for(int j=0; j<cantidad; j++)
       for(int k=0; k<cantidad; k++)
     if(matriz[j][k]>(matriz[j][i]+ matriz[i][k]))
      {
        costos[j][k]=matriz[j][i]+ matriz[i][k];
        predecesor[j][k];
      }
   }




ya lo otro seria implemenar el agoritmo que busque el camino minimo usando estas matrices. Si tienes duda en esto te puedo ayudar!
saludos desde cuba
#2
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!
#3
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?
#4
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
#5
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;

}
#6
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!
#7
Programación C/C++ / Camino minimo en floyd!
8 Julio 2013, 09:57 AM
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!