Cod sursa(job #637997)

Utilizator bog29Antohi Bogdan bog29 Data 20 noiembrie 2011 18:04:51
Problema Portal3 Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.39 kb
#include<fstream>
#include<vector>
#include<queue>
#define nr 9
#define mult 1000000005

using namespace std;
ifstream in("portal3.in");
ofstream out("portal3.out");

int tst;
long long dist[nr][nr], dm[nr], lng;

struct nod
{	
	long long x;
	long long y;
}gr[nr];


queue<int>q;

void getdist()
{	
	int i, crt;
	
	q.push(0);
	dm[0]=0;
	
	while(!q.empty() )
	{
		crt = q.front();
		q.pop();
		
		for(i=0; i<9; i++)
			if(dm[crt] + dist[crt][i] < dm[i])
			{		
				dm[i] = dm[crt] + dist[crt][i];
				q.push(i);
			}	
	}
	out<<dm[7];
}	
	
	
long long md(long long k)
{	
	if(k<0)
		return -k;
	return k;
}

long long mn(long long k, long long z)
{
	if(k < z)
		return k;
	return z;
}	


int main()
{	
	int i,j;
	
	in>>tst;
	
	for(;tst;tst--)
	{	
		for(i=0; i<=7; i++)
		{	for(j=1; j<=7; j++)
				dist[i][j] = mult;
			dm[i] = mult;
		}	
		
		in>>gr[7].x>>gr[7].y;
		
		in>>gr[1].x>>gr[1].y>>gr[2].x>>gr[2].y>>dist[1][2];
		dist[2][1]=dist[1][2];
		in>>gr[3].x>>gr[3].y>>gr[4].x>>gr[4].y>>dist[3][4];
		dist[4][3]=dist[3][4];
		in>>gr[5].x>>gr[5].y>>gr[6].x>>gr[6].y>>dist[5][6];
		dist[6][5]=dist[5][6];
		
		for(i=0; i<=7; i++)
			for(j=1; j<=7; j++)
			{	
				dist[i][j] = mn(dist[i][j], md(gr[i].x-gr[j].x)+md(gr[i].y-gr[j].y) );
				dist[j][i] = dist[i][j];
			}
		
		getdist();
	}	
	in.close();
	
	out.close();
	return 0;
}