ayuda con floyd

Iniciado por nolasco281, 16 Junio 2014, 05:51 AM

0 Miembros y 1 Visitante están viendo este tema.

nolasco281

Hola como estan.

Estaba tratando de hacer el algoritmo de floyd y lo tengo asi

pero me parece demasiado complejo.
Talvez alquien me pueda ayudar a no usar tantos for.

Código (cpp) [Seleccionar]
 int a[][] =
 { {0, 8, 5},
   {3, 0, inf},
   {inf, 2, 0}};
 
 main() {

   int N=a.length;
   
   int y, x, j;

   for (y= 0; y< N; y++)
     for (x= 0; x< N; x++)
if (a[x][y]>0)
 for (j= 0; j< N; j++)
   if (a[y][j]>0)
     if ((a[x][j]== 0) || (a[x][y]+a[y][j]< a[x][j]))
a[x][j]= a[x][y]+a[y][j];
     
   for (y= 0; y< N; y++)
     {
for (x= 0; x< N; x++)
 cout << (a[y][x]< 10 ? "  "+a[y][x] : " "+a[y][x]);
         cout << endl;
     }
 }


Saludos.
Lo que se puede imaginar... se puede programar.

eferion

Si evitas ciertos intentos de "optimizar" el algoritmo puedes acortar el código:

Código (cpp) [Seleccionar]

for ( int i = 0; i < N; i++ )
{
  for ( int j = 0; j < N; j++ )
  {
    for ( int k = 0; k < N; k++ )
    {
      int coste = path[j][i] + path[i][k];
      if ( path[j][k] > coste )
        path[j][k] = coste;
    }
  }
}


nolasco281

gracias me has dado algunas ideas. para mejorar el mio

Saludos.
Lo que se puede imaginar... se puede programar.