Cod sursa(job #637052)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 20 noiembrie 2011 11:00:43
Problema Portal3 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 1.06 kb
# include <fstream>
using namespace std;
ifstream f ("portal3.in");
ofstream g ("portal3.out");
long long int c[10],i,j,n,m,k,t,a[10][10];
struct punct
{
	long long int x,y;
}p[10];

 long long int dist (punct a,punct b)
 {
	 int s=0;
	 if (b.x>a.x)
		 s+=b.x-a.x;
	 else
		 s+=a.x-b.x;
	 
	 if (b.y>a.y)
		 s+=b.y-a.y;
	 else
		 s+=a.y-b.y;
	 return s;
 }
 
  void rf ()
  {
	  int k,i,j;
	  for (k=0;k<=7;k++)
		for (i=0;i<=7;i++)
			for (j=0;j<=7;j++)
				if (i!=j && i!=k && j!=k && a[i][j]>a[i][k]+a[k][j])
					a[i][j]=a[i][k]+a[k][j];

  }

int main ()
{
	
	f>>t;
	for (k=1;k<=t;k++)
	{
		f>>n>>m;
		p[0].x=p[0].y=0;
		p[7].x=n;
		p[7].y=m;
		for (i=1;i<=5;i+=2)
			f>>p[i].x>>p[i].y>>p[i+1].x>>p[i+1].y>>c[i];
		
		for (i=0;i<=7;i++)
			for (j=i;j<=7;j++)
			{	
				a[i][j]=dist (p[i],p[j]);
				a[j][i]=a[i][j];
			}
		if (c[1]<a[1][2])
			a[1][2]=a[2][1]=c[1];
		if (c[3]<a[3][4])
			a[3][4]=a[4][3]=c[3];
		if (c[5]<a[5][6])
			a[5][6]=a[6][5]=c[5];
		
		rf ();
		
		g<<a[0][7]<<"\n";
		
	}
	
	return 0;
}