Pagini recente » Cod sursa (job #2936710) | Cod sursa (job #647916) | Cod sursa (job #2543841) | Cod sursa (job #1463811) | Cod sursa (job #1354342)
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 30000
#define MOD(Z) ( ((Z) > (0)) ? (Z) : (-Z))
int n, m, x, y;
int vizitat[MAX_N + 1];
long long distanta[MAX_N + 1];
typedef struct GrafNode {
int node;
long long dist;
struct GrafNode *next;
} GrafNode;
GrafNode *g[MAX_N + 1];
void adauga(int a, int b, long long d) {
GrafNode *p = malloc( sizeof(GrafNode) );
p -> node = b;
p -> dist = d;
p -> next = g[a];
g[a] = p;
}
void citesteGraf(FILE *in) {
fscanf(in, "%d %d %d %d", &n, &m, &x, &y);
int i, a, b, d;
for (i = 1; i <= m; i++) {
fscanf(in, "%d %d %d", &a, &b, &d);
adauga(a, b, d);
adauga(b, a, d);
}
}
int coada[MAX_N];
void BFS(int nod) {
int L = 0;
coada[L] = nod;
int i;
GrafNode *p;
for (i = 0; i <= L; i++)
for (p = g[ coada[i] ]; p != NULL; p = p -> next)
if (distanta[p -> node] == 0 && p -> node != nod) {
if (p -> node > coada[i]) {
distanta[p -> node] = distanta[ coada[i] ] - p -> dist;
}
else {
distanta[p -> node] = distanta[ coada[i] ] + p -> dist;
}
coada[++L] = p -> node;
}
}
int main()
{
FILE *in = fopen("sate.in", "r");
FILE *out = fopen("sate.out", "w");
citesteGraf(in);
BFS(x);
if ( distanta[y] )
fprintf(out, "%lld", MOD(distanta[y]) );
else
fprintf(out, "0");
return 0;
}