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;
}
}
}
}
}