BELLMAN FORD
#include<stdio.h>
#define IFNIT 9999
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 mark[100];
int pi[100];
int p[100];
void Khoitao(Graph *G, int mark[], int pi[]){
int i;
for(i=1;i<=G->n;i++){
pi[i]=IFNIT;
mark[i]=0;
}
}
void dijkstra(Graph *G, int s){
int i,j,k;
pi[s]=0;
p[s]=-1;
for(i=1;i<=G->n;i++){
int min_pi=IFNIT;
for(j=1;j<=G->n;j++){
if(mark[j]==0 && pi[j]<min_pi){
min_pi=pi[j];
k=j;
}
}
mark[k]=1;
for(j=1;j<=G->n;j++){
if(G->L[k][j]!=0 && mark[j]==0){
if(pi[k]+G->L[k][j] <pi[j]){
pi[j]=pi[k]+G->L[k][j];
p[j]=k;
}
}
}
}
}
int main(){
Graph G;
int n,i,m,j,w;
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);
}
Khoitao(&G,mark,pi);
dijkstra(&G,1);
for(i=1;i<=G.n;i++){
printf("pi[%d] = %d, p[%d] = %d\n",i,pi[i],i,p[i]);
}
return 0;
}