Pagini recente » Cod sursa (job #453395) | Cod sursa (job #1726417) | Cod sursa (job #2863258) | Cod sursa (job #647698) | Cod sursa (job #271426)
Cod sursa(job #271426)
#include <fstream.h>
ifstream in("sate.in");
ofstream out("sate.out");
int n,m,s,d;
struct sate{int x,y,l;
sate *urm;} *prim,*ultim;
void adauga(int x,int y,int l){
sate *p;
p = new sate;
p->x = x;
p->y = y;
p->l = l;
p->urm= NULL;
ultim->urm = p;
ultim = p;
}
void citire(){
int x,y,l;
in>>n>>m>>s>>d;
//adauga prim
in>>x>>y>>l;
sate *p;
p = new sate;
p->x = x;
p->y = y;
p->l = l;
p->urm= NULL;
prim = ultim = p;
while(in>>x>>y>>l) adauga(x,y,l);
}
void afisare(){
for(sate *p = prim;p!=NULL;p=p->urm)
out<<p->x<<" "<<p->y<<" "<<p->l<<"\n";
}
int abs(int x){
if(x<0) return -x;
return x;
}
int cauta(int x,int y,int l){
for(sate *p=prim;p!=NULL;p=p->urm)
if(p->x == x && p->y == y && p->l == l) return 1;
return 0;
}
int solve(){
sate *q,*p,*r;
int l;
for(q = prim;q!=NULL;q=q->urm)
for(p = prim;p!=NULL;p=p->urm)
if(q->y == p->y){
if(q->x < p->x){
l = abs((q->l) - (p->l));
if(q->x == s && p->x==d)return l;
if(!cauta(q->x,p->x,l)) adauga(q->x,p->x,l);
} else if(q->x > p->x){
l = abs(q->l - p->l);
if(p->x == s && q->x == d) return l;
if(!cauta(p->x,q->x,l))adauga(p->x,q->x,l);
}
} else if(q->y == p->x){
if(q->x ==s && p->y == d) return (q->l+p->l);
if(!cauta(q->x,p->y,q->l+p->l))adauga(q->x,p->y,q->l+p->l);
} else if(q->x == p->y){
if(p->x == s && q->y == d) return (q->l+p->l);
if(!cauta(p->x,q->y,q->l+p->l))adauga(p->x,q->y,q->l+p->l);
}
}
int main(){
citire();
out<<solve();
//afisare();
return 0;
}