Cod sursa(job #67821)

Utilizator ada_sAda-Mihaela Solcan ada_s Data 25 iunie 2007 17:33:34
Problema Sate Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <math.h>
std::ifstream f1("sate.in");
std::ofstream f2("sate.out");
int main()
{
	long dist[310][310], m;
	int n, i, j, k, x, y, stop;
	f1>>n>>m>>x>>y;
	for (i=1; i<=n; i++)
		for (j=1; j<=n; j++)
			dist[i][j]=0;
	for (k=0; k<m; k++)
	{
		f1>>i>>j;
		f1>>dist[i][j];
    dist[i][j]*=-1;
		dist[j][i]=dist[i][j];
	}//for k
	stop=0;
	while (!stop)
	{
		stop=1;
		for (i=1; i<=n; i++)
			for (j=1; j<=n; j++)
				if (dist[i][j]<0)
   			{
					for (k=1; k<=n; k++)
						if ((dist[i][k]!=0)&&(j!=k)&&(dist[j][k]==0))
							if (((j-i)*(k-i))>=0)  //ac semn
							{
							  dist[j][k]=-1*abs(abs(dist[i][j])-abs(dist[i][k]));
							  dist[k][j]=dist[j][k];	
								if (dist[x][y]!=0)
									stop=1;
								else
								  stop=0;
							}//if
							else                  //semn dif    
							{
								dist[j][k]=-1*(abs(dist[i][j])+abs(dist[i][k]));	
								dist[k][j]=dist[j][k];
								if (dist[x][y]!=0)
									stop=1;
								else
								  stop=0;
							}//else	
					dist[i][j]*=-1;
			  }//if
	}//while
	f2<<abs(dist[x][y])<<"\n";
	f1.close();
	f2.close();
	return 0;
}//main