code program metode warshall
-----------------------------------------------------------------
#include<stdio.h>
#define m 100
int q[5][5]={{m,1,3,m,m},{m,m,1,m,5},{3,m,m,2,m},{m,m,m,m,1},{m,m,m,m,m}};
int p[5][5]={{0,1,1,0,0},{0,0,1,0,1},{1,0,0,1,0},{0,0,0,0,1},{0,0,0,0,0}};
int r[5][5]={{m,0,0,m,m},{m,m,0,m,0},{0,m,m,0,m},{m,m,m,m,0},{m,m,m,m,m}};
int i, j, k;
void tampilq();
void tampilp();
void tampilr();
void bebanrute();
void jalur();
typedef struct {
int rute[m];
int jml;
}stack;
void inisial(stack *);
void push(int,stack *);
int pop(stack *);
int kosong(stack *);
void rute();
stack tumpukan;
void main()
{
printf("graph - risma afitah\n\n");
printf("matrik awal :\n");
printf("matrik q :\n");
tampilq();
printf("\n\n");
printf("matrik p :\n");
tampilp();
printf("\n\n");
printf("matrik r :\n");
tampilr();
printf("\n");
printf("warshall beban (q) :\n");
bebanrute();
tampilq();
printf("\n");
printf("warshall jalur (p) :\n");
jalur();
tampilp();
printf("\n");
printf("warshall rute (r) :\n");
bebanrute();
tampilr();
rute();
}
void tampilp()
{
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("%d\t", p[i][j]);
}
printf("\n");
}
}
void tampilq()
{
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("%d\t", q[i][j]);
}
printf("\n");
}
}
void tampilr()
{
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("%d\t", r[i][j]);
}
printf("\n");
}
}
void bebanrute()
{
for(k=0; k<5; k++)
for(i=0; i<5; i++)
for(j=0; j<5; j++)
if((q[i][k]+q[k][j]) < q[i][j])
{
q[i][j] = q[i][k]+q[k][j];
if(r[k][j]==0)
r[i][j]=k+1;
else
r[i][j]=r[k][j];
}
}
void jalur()
{
for(k=0; k<5; k++)
for(i=0; i<5; i++)
for(j=0; j<5; j++)
p[i][j]=(p[i][j]) || (p[i][k] && p[k][j]);
}
void inisial(stack *s)
{
s->jml = 0;
}
void push(int y, stack *s)
{
s->rute[s->jml] = y;
(s->jml)++;
}
int pop(stack *s)
{
int temp;
if(kosong(s))
{
puts("stack kosong");
temp = ' ';
return temp;
}
else
{
(s->jml)--;
temp = s->rute[s->jml];
return temp;
}
}
int kosong(stack *s)
{
if(s->jml == 0)
return 1;
else
return 0;
}
void rute()
{
int asal, tujuan, tujuan2, tmp, x;
printf("\nmasukkan asal : ");
scanf("%d", &asal);
printf("masukkan tujuan : ");
scanf("%d", &tujuan);
tujuan2=tujuan;
inisial(&tumpukan);
do
{
tmp=r[asal-1][tujuan-1];
if(tmp==m)
{
printf("tidak ada rute");
break;
}
if(tmp!=0)
{
push(tmp,&tumpukan);
tujuan=tmp;
}
}
while(tmp!=0);
printf("rute dari %d ke %d adalah : ", asal, tujuan2);
printf("%d - ", asal);
while(!kosong(&tumpukan))
{
x=pop(&tumpukan);
printf("%d - ", x);
}
printf("%d\n", tujuan2);
if(q[asal-1][tujuan2-1]==100)
{
printf("tidak ada beban");
//break;
}
else
{
printf("total beban = %d", q[asal-1][tujuan2-1]);
}
}
-----------------------------------------------------------------
untuk output programnya silakan di coba sendiri dulu nanti outpunya bagaimana, jangan lupa gunakan compiler c nya. Semoga bermanfaat sedikit ilmu ku ini amin.