Pagini recente » Cod sursa (job #1850843) | Cod sursa (job #179085) | Cod sursa (job #2011268) | Statistici Amariei Maria (tasia) | Cod sursa (job #281556)
Cod sursa(job #281556)
#include<stdio.h>
#define NMAX 30000
int n,m,start,end;
struct nod{
int info,ds;
nod *adr;
};
struct lista{
nod *vf,*sf;
};
lista vl[NMAX+1];
void addend(lista &l,int x,int dist){
nod *n=new nod;
n->info=x;
n->adr=NULL;
n->ds=dist;
if(!l.vf) l.vf=n;
else l.sf->adr=n;
l.sf=n;
}
int coada[NMAX+1],li=1,ls=0,d[NMAX+1],viz[NMAX+1];
void pune(int x){
coada[++ls]=x;
viz[x]=1;
}
void scoate(int &x){
x=coada[li++];
}
int coadavida(){
return li>ls;
}
int main(){
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
int i,x,y,z,ok=0;
nod *nc;
scanf("%d%d%d%d",&n,&m,&start,&end);
for(i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
addend(vl[x],y,z);
addend(vl[y],x,z);
}
pune(start);
while(!coadavida()&&!ok){
scoate(x);
nc=vl[x].vf;
while(nc){
y=nc->info;
if(!viz[y]){
pune(y);
if(y>x) d[y]=d[x]+nc->ds;
else d[y]=d[x]-nc->ds;
}
if(y==end){
ok=1;
break;
}
nc=nc->adr;
}
}
printf("%d ",d[end]);
return 0;
}