Pagini recente » Cod sursa (job #2126342) | Cod sursa (job #2645434) | Cod sursa (job #2203159) | Cod sursa (job #2605374) | Cod sursa (job #397547)
Cod sursa(job #397547)
#include<fstream>
#include<iostream>
using namespace std;
#define nn 30005
struct nod
{
int info,dist;
nod *next;
};
nod *g[nn];
int n,m,x,y,D[nn];
void adauga(int a,int b,int d)
{
nod *t=new nod;
t->info=b;
t->dist=d;
t->next=g[a];
g[a]=t;
}
int bfs()
{
int coada[nn];
int v[nn];
int st,dr;
for(int i=1;i<=n;++i)
v[i]=0;
st=dr=1;
coada[st]=x;
v[1]=1;
while(coada[st]!=y&&st<=dr)
{
for(nod *t=g[coada[st]];t;t=t->next)
if(!v[t->info])
{
coada[++dr]=t->info;
v[t->info]=1;
if(coada[st]<coada[dr])
D[dr]=D[st]+g[coada[st]]->dist;
else D[dr]=D[st]-g[coada[st]]->dist;
}
else
g[coada[st]]=g[coada[st]]->next;
st++;
cout<<st<<" "<<coada[st]<<" "<<D[st]<<" ";
cin.get();
}
return D[st];
// for(int i=1;i<=n;++i)
// cout<<coada[i]<<" ";
}
int main()
{
int i,j,d;
ifstream fin("sate.in");
fin>>n>>m>>x>>y;
for(;m;--m)
{
fin>>i>>j>>d;
adauga(i,j,d);
adauga(j,i,d);
}
/*for(int i=1;i<=n;++i)
{
cout<<i<<": ";
for(nod *t=g[i];t;t=t->next)
{
cout<<t->info<<"("<<t->dist<<")"<<" ";
}
cout<<endl;
}
*/
d=bfs();
FILE *f=fopen("sate.out","w");
fprintf(f,"%d",d);
return 0;
}