nosotrosprogramamos
  Grafos -Warshall
 
CODIFICACION DEL ALGORITMO DE WARSHALL

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MaxNodos 6
void ImpMatriz(int *);
int ExistenArcos(int *);
void CopiaMatriz(int *, int *);
void InicializaMat(int *);
int conexion (int *,int *);
main() {
int nfila, ncol, f, c, Dspto, x, y;
//Relaciones identificadas en el grafo
int Adyacencia[MaxNodos][MaxNodos]={{0,1,1,1,0,0},{0,0,1,0,1,1},{0,0,0,1,1,0},{0,0,0,0,1,0},{0,0,0,0,0,1},{0,0,0,0,0,0}};
// Pesos relacionados al grafo
int MatPesos[MaxNodos] [MaxNodos] = {{0,3,4,6,0,0},
                                    {0,0,2,0,4,3},
                                    {0,0,0,1,3,0},
                                    {0,0,0,0,5,0},
                                    {0,0,0,0,0,2},
                                    {0,0,0,0,0,0}};
int MatResultante[MaxNodos][MaxNodos]= {{0,0,0,0,0,0},
                                        {0,0,0,0,0,0},
                                        {0,0,0,0,0,0},
                                        {0,0,0,0,0,0},
                                        {0,0,0,0,0,0},
{0,0,0,0,0,0}};
int MatAuxiliar[MaxNodos][MaxNodos]= {{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0}};


int *MtzAdy =&Adyacencia[0][0];
int *MtzPes =&MatPesos[0][0];
int *MtzAux =&MatAuxiliar[0][0];

int *MtzRes =&MatResultante[0][0];

//InicializaMat(MtzAdy);
printf("tMatriz de adyacencian");
ImpMatriz(MtzAdy);
//getch();
printf("ntMatriz de Pesosn");
ImpMatriz(MtzPes);
//getch();
CopiaMatriz(MtzAdy,MtzAux);
printf("ntMatriz Auxiliarn");
ImpMatriz(MtzAux);
//getch();

//WARSHALL
printf ("nConexion de Matrizn");
conexion (MtzAdy,MtzAux);
ImpMatriz (MtzAux);  
getch();     

} // Fin del programa del main()
//Muestra las relaciones almacenadas en la matriz de adyacencia
void ImpMatriz(int *MtzX){
int nfila,ncol,Dspto;
for(nfila=0; nfila<MaxNodos; nfila++) {
for(ncol=0; ncol<MaxNodos; ncol++) {
//printf(" F[%d]C[%d]=", nfila, ncol);
Dspto=ncol+(nfila*MaxNodos);
printf("%d", *(MtzX+Dspto));
}
printf("n");
}
}
// Asigna ceros a las posiciones de la matriz
void InicializaMat(int *MtzAdy ){
int nfila,ncol,Dspto;
for(nfila=0; nfila<MaxNodos; nfila++) {
for(ncol=0; ncol<MaxNodos; ncol++) {
Dspto=ncol+(nfila*MaxNodos);
(*(MtzAdy+Dspto))=0;
}
}
}
// Copia el contenido de una matriz en otra
void CopiaMatriz(int *MtzAdy,int *MtzAux){
int nfila,ncol,Dspto;
for(nfila=0; nfila<MaxNodos; nfila++)
for(ncol=0; ncol<MaxNodos; ncol++){
Dspto=ncol+(nfila*MaxNodos);
*(MtzAux+Dspto) = *(MtzAdy+Dspto);
}
}
//Verifica si existen conexiones para una matriz resultante
int ExistenArcos(int* MtzAdy){
int nfila,ncol,Dspto,Resultado=0;
for(nfila=0; nfila<MaxNodos; nfila++) {
for(ncol=0; ncol<MaxNodos; ncol++){
Dspto=ncol+(nfila*MaxNodos);
if (*(MtzAdy+Dspto)== 1){
nfila=ncol=MaxNodos+1;
Resultado= 1;
}
}
}
return Resultado;
}

int conexion(int *MtzAdy,int *MtzAux){
    int i,j,k,Dspto,Dspto1,Dspto2;
    for (k=0;k<MaxNodos;k++){
        for (i=0;i<MaxNodos;i++){
            for (j=0;j<MaxNodos;j++){
                Dspto=i+(j*MaxNodos);
                if (*(MtzAdy+Dspto)==0){
                       Dspto1=i+(k*MaxNodos);
                       Dspto2=k+(i*MaxNodos);                 
                   if ((*(MtzAdy+Dspto1))||(*(MtzAdy+Dspto2)))
                       *(MtzAux+Dspto) = 1;
                }
               }
            }
        }
    
    }
 
  Hoy habia 23622 visitantes¡Aqui en esta página!  
 
Se prohibe la venta de cualquier codigo que se encuentre en esa pagaina, esta pagina es de uso gratuito en un 100%, DESDE LOS CODIGOS INCLUYENDO EL DOMINIO. En caso de querer optar a clases personalizadas ponte en contacto atravez de facebook en nuestra FanPage NosotrosProgramamos Tambien puedes pegar nuestra url en facebook: http://www.facebook.com/pages/NosotrosProgramamos/148584758550145 Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis