Pagini recente » Cod sursa (job #1642480) | Cod sursa (job #2134877) | Cod sursa (job #100480) | Cod sursa (job #2496512) | Cod sursa (job #364769)
Cod sursa(job #364769)
#include <cstdio>
#include <cstdlib>
struct muchie{
int capat; int cost;
};
muchie *a[30001];
int n,x,y, grad[30001];
int v[30001], cost[30001];
int bfs(int start, int finish){
int coada[30001],st=1,dr=1;
coada[1] = start;
v[start]=1;
cost[start]=0;
while(st <= dr){
int k = coada[st++];
for(int i = 1; i<=grad[k] ; i++)
if( ! v[a[k][i].capat] )
{
coada[++dr] = a[k][i].capat;
v[coada[dr]] =1;
if(k<a[k][i].capat)
cost[a[k][i].capat] = cost[k] + a[k][i].cost;
else
cost[a[k][i].capat] = cost[k] - a[k][i].cost;
if(coada[dr] == finish)
return cost[finish];
}
}
for(int i =1 ; i<= dr ; i++)
printf("%d ",coada[i]);
printf("\n");
return -1;
}
void read(){
FILE *f = fopen("sate.in","r");
int m;
fscanf(f,"%d%d%d%d",&n,&m,&x,&y);
for(int i=1;i<=n;i++){
a[i] = (muchie *) malloc(1*sizeof(muchie));
grad[i]=0;
}
for( ; m; m--){
int i,j,c;
fscanf(f,"%d%d%d",&i,&j,&c);
a[i] = (muchie *)realloc(a[i], sizeof(muchie)*(grad[i]+2));
grad[i]++;
a[i][grad[i]].capat = j;
a[i][grad[i]].cost = c;
grad[j]++;
a[j] = (muchie *) realloc(a[j], sizeof(muchie) * (grad[j]+2));
a[j][grad[j]].capat=i;
a[j][grad[j]].cost=c;
}
}
void afis(){
for(int i=1;i<=n;i++)
{
printf ("%d : ",i);
for(int j = 1 ; j<=grad[i] ; j++)
printf("(%d, %d, %d)\n",i, a[i][j].capat, a[i][j].cost);
printf("\n");
}
}
int rez(int x , int y){
if(x==y)
return 0;
if(x>y)
{
int aux = x; x= y; y = aux;
}
return bfs(x,y);
}
int main(){
read();
// afis();
FILE *f = fopen("sate.out","w");
fprintf(f,"%d\n",rez(x,y));
fclose(f);
return 0;
}