Cod sursa(job #635468)

Utilizator ProtomanAndrei Purice Protoman Data 19 noiembrie 2011 11:57:09
Problema Portal3 Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.05 kb
#include <algorithm>
#include <stdio.h>
#include <iostream>
#include <fstream>

using namespace std;

struct portal
{
	int x1, y1, x2, y2, c;
};
int n, m, sol;
portal x[4];
int p[4], sel[4];

int dist(int x1, int y1, int x2, int y2)
{
	return abs(x1 - x2) + abs(y1 - y2);
}

void perm(int level)
{
	if (level > 3)
	{
		int xa = 0, ya = 0, pasi = 0;
		for (int i = 1; i <= 3; i++)
		{
			pasi += dist(xa, ya, x[p[i]].x1, x[p[i]].y1) + x[p[i]].c;
			xa = x[p[i]].x2;
			ya = x[p[i]].y2;

			sol = min(sol, pasi + dist(xa, ya, n, m));
		}

		return;
	}

	for (int i = 1; i <= 3; i++)
		if (!sel[i])
		{
			sel[i] = level;

			p[level] = i;
			perm(level + 1);

			sel[i] = 0;
		}
}
				
int main()
{
	ifstream cin("portal3.in");
	ofstream cout("portal3.out");

	int testCases;
	for (cin >> testCases; testCases; testCases--)
	{
		cin >> n >> m;
		sol = dist(0, 0, n, m);

		for (int i = 1; i <= 3; i++)
			cin >> x[i].x1 >> x[i].y1 >> x[i].x2 >> x[i].y2 >> x[i].c;

		perm(1);

		cout << sol;
	}

	return 0;
}