Pagini recente » Cod sursa (job #780108) | Cod sursa (job #603086) | Cod sursa (job #434671) | Cod sursa (job #2927030) | Cod sursa (job #1254878)
#include<fstream>
using namespace std;
int ind_stiva,n,s[10000],viz[10000],a[10000][10000],x,y,j,k;
long dist,m,i;
ifstream f("sate.in");
ofstream g("sate.out");
void intro()
{
int d;
f>>n>>m>>x>>y;
for(i=1;i<=m;i++)
{
f>>j>>k>>d;
if(k<j)
{
a[k][j]=-d;
a[j][k]=d;
}
else
{
a[j][k]=d;
a[k][j]=-d;
}
}
}
void push(int j)
{
s[++ind_stiva]=j;
}
int urmator(int i)
{
int l;
for(l=1;l<=n;l++)
if(a[i][l]!=0 && !viz[l] && l!=i)
return l ;
return 0 ;
}
int main()
{
int ok=0;
intro();
for(i=1;i<=n;i++)
viz[i]=0;
j=x;
viz[j]=1;
push(j);
do{
if(ok==0)
{
k=urmator(j);
ok=(k==y);
if(k>0 && ok==0)
{
viz[k]=1;
push(j=k);
}
else
{
if(ok==1)
dist=a[s[ind_stiva]][y];
j=s[--ind_stiva];
}
}
else
{
dist=dist+a[s[ind_stiva]][s[ind_stiva+1]];
j=s[--ind_stiva];
}
}while(ind_stiva>0) ;
if(dist)
g<<dist<<endl;
else
g<<-1;
g.close();
return 0;
}