Cod sursa(job #636005)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 19 noiembrie 2011 16:15:42
Problema Portal3 Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.88 kb
#include <fstream>
using namespace std;

ifstream fi ("portal3.in");
ofstream fo ("portal3.out");

const int dim = 10, OO = (1<<31)-1;
int C[dim], V[dim], T, N, M, D;
struct pct { int x, y; } P[dim];

void back (int x, int y, int d)
{
	if (x == N && y == M)
	{
		D = d < D ? d : D;
		return;
	}
	
	for (int i = 0, j, dn; i <= 6; i++)
		if (!V[i])
		{
			j = i;
			if (i != 6)
				if (i & 1)
					j--;
				else
					j++;
			dn = d + abs(x - P[i].x) + abs(y - P[i].y) + C[i];
			
			V[i] = V[j] = 1;
			back (P[j].x, P[j].y, dn);			
			V[i] = V[j] = 0;
		}
}


int main ()
{
	fi >> T;
	while (T--)
	{
		fi >> N >> M;
		D = OO;
		for (int i = 0; i < 6; i += 2)
		{
			fi >> P[ i ].x >> P[ i ].y;
			fi >> P[i+1].x >> P[i+1].y;
			fi >> C[i]; C[i+1] = C[i];
			
		}
		P[6].x = N, P[6].y = M;
		
		back (0, 0, 0);
		
		fo << D;
	}
	return 0;
}