sábado, 25 de febrero de 2012

Algoritmo de Floyd

Os dejo el algoritmo de Floyd, para el que lo necesite. Esta realizado de forma dinámica en C. Espero que os sea útil!!!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define max 50

int floyd(int matriz[max][max],int n);

int  main(){
     int n,i,j;
     int matriz[max][max];
   printf("\n PROBLEMA DE FLOYD");
   printf("\n\n Introduce el valor de nodos: ");
   scanf("%d",&n);
   for (i=0;i<n;i++){
      for (j=0;j<n;j++){
         printf(" Introduce el peso entre los nodos [%d][%d]:  ",i,j);
         scanf("%d",&matriz[i][j]);
         }
      }
   floyd(matriz,n);
   printf("\n");
   printf("\n");
   system("pause");
   return 1;
}

int floyd(int matriz[max][max],int n){
    int i,j,k;
    int mat[n][n],resul[n][n];
    for (i=0;i<n;i++){
        for (j=0;j<n;j++){
            mat[i][j]=matriz[i][j];
        }
    }
    for (i=0;i<=n;i++){
        for (j=0;j<n;j++){
            for (k=0;k<n;k++){
                if (mat[i][j]<(mat[i][k]+mat[k][j]))
                   mat[i][j]=mat[i][j];
                   else
                   mat[i][j]=(mat[i][k]+mat[k][j]);
            }
        }
    }
    printf("La matriz resultante (minima) es:\n");
    for (i=0;i<n;i++){
        for (j=0;j<n;j++){
            printf("%d  ",mat[i][j]);
        }
        printf("\n");
    }
}

No hay comentarios:

Publicar un comentario