Pagini recente » Cod sursa (job #914250) | Cod sursa (job #2765931) | Cod sursa (job #1146001) | Cod sursa (job #3225298) | Cod sursa (job #271499)
Cod sursa(job #271499)
#include <fstream.h>
#define max 30001
ifstream in("sate.in");
ofstream out("sate.out");
int n,m,x,y,d[max],s[max],st[max];
struct nod{int info,l;
nod *urm;} *VF[max];
void adauga(nod *&prim,int info,int l){
nod *p;
p = new nod;
p->info = info;
p->l = l;
p->urm = prim;
prim = p;
}
void citeste(){
int a,b,l;
in>>n>>m>>x>>y;
while(in>>a>>b>>l){adauga(VF[a],b,l);adauga(VF[b],a,l);}
}
int abs(int x){
if(x<0) return -x;
return x;
}
void parcurge(int x){
nod *p;
int prim,ultim;
prim = ultim = 1;
st[prim] = x;
s[x] = 1;
while(prim <= ultim && !d[y]){
for(p = VF[st[prim]]; p!=NULL;p=p->urm)
if(!s[p->info]){
s[p->info] = 1;
st[++ultim] = p->info;
if(st[prim] > p->info && st[1] < p->info)
d[p->info] = abs(d[st[prim]] - p->l);
if(st[prim] < p->info && st[1] < p->info)
d[p->info] = abs(p->l - d[st[prim]]);
if(st[prim] > p->info && st[1] > p->info)
d[p->info] = abs(p->l - d[st[prim]]);
if(st[prim] < p->info && st[1] < p->info)
d[p->info] = p->l + d[st[prim]];
}
prim++;
}
}
void afisare(){
/*for(int i=1;i<=n;++i){
for(nod *p = VF[i];p!=NULL;p=p->urm)
out<<p->info<<" ";
out<<"\n";
}*/
for(int i=1;i<=n;++i)
out<<d[i]<<" ";
}
int main(){
citeste();
parcurge(x);
//afisare();
out<<d[y];
return 0;
}