Cod sursa(job #1253630)

Utilizator Bogdan.GhGheorghe Bogdan Bogdan.Gh Data 1 noiembrie 2014 15:58:24
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream>
#include<iostream>
#include<iomanip>
using namespace std;

int ind_stiva,n,m,s[10000],viz[10000],a[10000][10000],i,j,k,x,y,dist,ok=0,q,w,satf;
ofstream g("sate.out");
ifstream f("sate.in");
void intro(int m, int n)
{
	int d;
	for(i=1;i<=m;i++)
	{
		f>>x>>k>>d;
		if(k<x)
		{
			a[k][x]=d;
			a[x][k]=-d;
		}
		else
		{
			a[x][k]=-d;
			a[k][x]=d;
		}
	}
}

void push(int j)
{
	s[ind_stiva++]=j;
}

int pop()
{
	return(s[ind_stiva--]);
}

int urmator(int i)
{
	int l;
	for(l=1;l<=m;l++)
		if(a[i][l]!=0 && viz[l]==0 &&l!=i)
			return l;
	return 0;	
}

int main()
{
	f>>m>>n>>j>>satf;
	intro(n,m);
	
	for(i=1;i<=n;i++)
		viz[i]=0;
	viz[j]=1;
	push(j);
	
	do{
		if(ok==0)
			k=urmator(j);
		if(k==satf && ok==0)
		{
			ok=1;
			j=k;
			push(j);
		}
		if(k>0 && ok==0)
		{
			viz[k]=1;
			push(k);
			j=k;
		}
		else
		{
			ind_stiva--;
			dist=dist+a[j][s[ind_stiva-1]];
			if(!ok)
				j=pop();
			else
				j=s[ind_stiva-1];
			
		}
	}while(ind_stiva>=0);
	g<<dist;
	g.close();
	return 0;
}