Floyd_Warshal
#include<stdio.h>
#define IFNIT 9999999
typedef struct{
int n;
int L[500][500];
}Graph;
void init_graph(Graph *G, int n){
G->n=n;
int i,j;
for(i=1;i<=G->n;i++)
for(j=1;j<=G->n;j++)
G->L[i][j]=0;
}
void add_graph(Graph *G, int x, int y, int w){
G->L[x][y]=w;
}
int pi[100][100];
int next[100][100];
void Floyd_Warshall(Graph *G){
int i,j,k;
for(i=1;i<=G->n;i++){
for(j=1;j<=G->n;j++){
pi[i][j]=IFNIT;
next[i][j]=-1;
}
}
for(i=1;i<=G->n;i++){
pi[i][i]=0;
}
for(i=1;i<=G->n;i++)
for(j=1;j<=G->n;j++)
if(G->L[i][j]!=0){
pi[i][j]=G->L[i][j];
next[i][j]=j;
}
for(k=1;k<=G->n;k++)
for(i=1;i<=G->n;i++)
for(j=1;j<=G->n;j++){
if(pi[i][k]+pi[k][j] < pi[i][j]){
pi[i][j]=pi[i][k]+pi[k][j];
next[i][j]=next[i][k];
}
}
}
int main(){
Graph G;
int n,i,m,w,j;
int u,v;
freopen("dt.txt","r",stdin);
scanf("%d%d",&n,&m);
init_graph(&G,n);
for(i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
add_graph(&G,u,v,w);
}
Floyd_Warshall(&G);
for(i=1;i<=G.n;i++){
for(j=1;j<=G.n;j++){
if(pi[i][j]>IFNIT-100000)
printf("%d -> %d: oo\n",i,j);
else
printf("%d -> %d: %d\n",i,j,pi[i][j]);
}
}
return 0;
}