#include< stdio.h >
#include< stdio.h>
#include< conio.h>
#define MAX 30
void floyd(int[MAX][MAX],int);
int mix(int,int);
void main()
{
int l[MAX][MAX],n,i,j;
clrscr();
printf("\n Enter number of vertices you need:");
scanf("%d",&n);
printf("\n[Enter 9999 as infinity value]");
for(i=1;i<= n;i++)
{
for(j=1;j<= n;j++)
{
printf("\n l[%d][%d]:",i,j);
scanf("%d",&l[i][j]);
}
}
floyd(l,n);
getch();
}
void floyd(int l[MAX][MAX],int n)
{
int D[MAX][MAX],p[MAX][MAX],i,j,k;
for(i=1;i<= n;i++)
for(j=1;j<= n;j++)
{
D[i][j]=l[i][j];
p[i][j]=0;
}
for(k=1;k<= n;k++)
{
for(i=1;i<= n;i++)
{
for(j=1;j<= n;j++)
{
if(D[i][k]+D[k][j] < D[i][j])
{
p[i][j]=k;
}
D[i][j]=min(D[i][j],D[i][k]+D[k][j]);
}
}
printf("\n--k=%d-------D%d---------\t\t ---------P%d------",k,k,k);
for(i=1;i<=n;i++)
{
printf("\n ");
for(j=1;j<= n;j++)
{
printf("%5d",D[i][j]);
}
printf("\t\t");
for(j=1;j<= n;j++)
{
printf("%5d",p[i][j]);
}
}
}
}
int min(int a,int b)
{
return a<= b ? a:b;
}
OUTPUT
Enter number of vertices you need:4
[Enter 9999 as infinity value]
l[1][1]:0
l[1][2]:5
l[1][3]:9999
l[1][4]:9999
l[2][1]:50
l[2][2]:0
l[2][3]:15
l[2][4]:5
l[3][1]:30
l[3][2]:9999
l[3][3]:0
l[3][4]:15
l[4][1]:30
l[4][2]:9999
l[4][3]:5
l[4][4]:0
l[4][3]:5
l[4][4]:0
--k=1-------D1--------- ---------P1------
0 5 9999 9999 0 0 0 0
50 0 1 5 0 0 0 0
30 35 0 15 0 1 0 0
30 35 5 0 0 1 0 0
--k=2-------D2--------- ---------P2------
0 5 20 10 0 0 2 2
50 0 15 5 0 0 0 0
30 35 0 15 0 1 0 0
30 35 5 0 0 1 0 0
--k=3-------D3--------- ---------P3------
0 5 20 10 0 0 2 2
45 0 15 5 3 0 0 0
30 35 0 15 0 1 0 0
30 35 5 0 0 1 0 0
--k=4-------D4--------- ---------P4------
0 5 15 10 0 0 4 2
35 0 10 5 4 0 4 0
30 35 0 15 0 1 0 0
30 35 5 0 0 1 0 0
#include< stdio.h>
#include< conio.h>
#define MAX 30
void floyd(int[MAX][MAX],int);
int mix(int,int);
void main()
{
int l[MAX][MAX],n,i,j;
clrscr();
printf("\n Enter number of vertices you need:");
scanf("%d",&n);
printf("\n[Enter 9999 as infinity value]");
for(i=1;i<= n;i++)
{
for(j=1;j<= n;j++)
{
printf("\n l[%d][%d]:",i,j);
scanf("%d",&l[i][j]);
}
}
floyd(l,n);
getch();
}
void floyd(int l[MAX][MAX],int n)
{
int D[MAX][MAX],p[MAX][MAX],i,j,k;
for(i=1;i<= n;i++)
for(j=1;j<= n;j++)
{
D[i][j]=l[i][j];
p[i][j]=0;
}
for(k=1;k<= n;k++)
{
for(i=1;i<= n;i++)
{
for(j=1;j<= n;j++)
{
if(D[i][k]+D[k][j] < D[i][j])
{
p[i][j]=k;
}
D[i][j]=min(D[i][j],D[i][k]+D[k][j]);
}
}
printf("\n--k=%d-------D%d---------\t\t ---------P%d------",k,k,k);
for(i=1;i<=n;i++)
{
printf("\n ");
for(j=1;j<= n;j++)
{
printf("%5d",D[i][j]);
}
printf("\t\t");
for(j=1;j<= n;j++)
{
printf("%5d",p[i][j]);
}
}
}
}
int min(int a,int b)
{
return a<= b ? a:b;
}
OUTPUT
Enter number of vertices you need:4
[Enter 9999 as infinity value]
l[1][1]:0
l[1][2]:5
l[1][3]:9999
l[1][4]:9999
l[2][1]:50
l[2][2]:0
l[2][3]:15
l[2][4]:5
l[3][1]:30
l[3][2]:9999
l[3][3]:0
l[3][4]:15
l[4][1]:30
l[4][2]:9999
l[4][3]:5
l[4][4]:0
l[4][3]:5
l[4][4]:0
--k=1-------D1--------- ---------P1------
0 5 9999 9999 0 0 0 0
50 0 1 5 0 0 0 0
30 35 0 15 0 1 0 0
30 35 5 0 0 1 0 0
--k=2-------D2--------- ---------P2------
0 5 20 10 0 0 2 2
50 0 15 5 0 0 0 0
30 35 0 15 0 1 0 0
30 35 5 0 0 1 0 0
--k=3-------D3--------- ---------P3------
0 5 20 10 0 0 2 2
45 0 15 5 3 0 0 0
30 35 0 15 0 1 0 0
30 35 5 0 0 1 0 0
--k=4-------D4--------- ---------P4------
0 5 15 10 0 0 4 2
35 0 10 5 4 0 4 0
30 35 0 15 0 1 0 0
30 35 5 0 0 1 0 0