Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: nolasco281 en 16 Junio 2014, 05:51 am



Título: ayuda con floyd
Publicado por: nolasco281 en 16 Junio 2014, 05:51 am
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
  1.  int a[][] =
  2.  { {0, 8, 5},
  3.    {3, 0, inf},
  4.    {inf, 2, 0}};
  5.  
  6.  main() {
  7.  
  8.    int N=a.length;
  9.  
  10.    int y, x, j;
  11.  
  12.    for (y= 0; y< N; y++)
  13.      for (x= 0; x< N; x++)
  14. if (a[x][y]>0)
  15.  for (j= 0; j< N; j++)
  16.    if (a[y][j]>0)
  17.      if ((a[x][j]== 0) || (a[x][y]+a[y][j]< a[x][j]))
  18. a[x][j]= a[x][y]+a[y][j];
  19.  
  20.    for (y= 0; y< N; y++)
  21.      {
  22. for (x= 0; x< N; x++)
  23.  cout << (a[y][x]< 10 ? "  "+a[y][x] : " "+a[y][x]);
  24.          cout << endl;
  25.      }
  26.  }
  27.  

Saludos.


Título: Re: ayuda con floyd
Publicado por: eferion en 16 Junio 2014, 10:40 am
Si evitas ciertos intentos de "optimizar" el algoritmo puedes acortar el código:

Código
  1. for ( int i = 0; i < N; i++ )
  2. {
  3.  for ( int j = 0; j < N; j++ )
  4.  {
  5.    for ( int k = 0; k < N; k++ )
  6.    {
  7.      int coste = path[j][i] + path[i][k];
  8.      if ( path[j][k] > coste )
  9.        path[j][k] = coste;
  10.    }
  11.  }
  12. }


Título: Re: ayuda con floyd
Publicado por: nolasco281 en 16 Junio 2014, 11:04 am
gracias me has dado algunas ideas. para mejorar el mio

Saludos.