Tuesday, February 07, 2012

FloydWarshall MIN-MAX Distance

/***
    FloydWarshall MIN-MAX Distance
    Author : Md.Saiful Islam
***/


#include<stdio.h>
#define MAX(aa,bb) (aa>bb?aa:bb)
#define MIN(aa,bb) (aa<bb?aa:bb)


int Road[102][102];
int Node,Edge,test,c1,c2,cost,q1,q2;


void Floyed_Warshall()
{
int k,i,j;
for(i=1;i<=Node;i++)
Road[i][i]=0;


for(k=1;k<=Node;k++)
for(i=1;i<=Node;i++)
for(j=1;j<=Node;j++)
Road[i][j] = MIN(Road[i][j], MAX(Road[i][k],Road[k][j]));
}


int main()
{
int i,kase=0,j;
while(scanf("%d %d %d",&Node,&Edge,&test)==3 && (Node || Edge || test))
{
for(i=1;i<=Node;i++)
for(j=1;j<=Node;j++)
Road[i][j]=10000;




for(i=1;i<=Edge;i++)
{
scanf("%d %d %d",&c1,&c2,&cost);
Road[c1][c2]=cost; Road[c2][c1]=cost;
}
Floyed_Warshall();


if(kase>0)
printf("\n");


printf("Case #%d\n",++kase);
for(i=1;i<=test;i++)
{
scanf("%d %d",&q1,&q2);


if(Road[q1][q2]==10000)
printf("no path\n");
else
printf("%d\n",Road[q1][q2]);
}
}
return 0;
}
/*
Input:
7 9 3
1 2 50
1 3 60
2 4 120
2 5 90
3 6 50
4 6 80
4 7 70
5 7 40
6 7 140
1 7
2 6
6 2
7 6 3
1 2 50
1 3 60
2 4 120
3 6 50
4 6 80
5 7 40
7 5
1 7
2 4
Output:
Case #1
80
60
60


Case #2
40
no path
80
*/

No comments:

Post a Comment