Pagini recente » Cod sursa (job #2374341) | Cod sursa (job #1114337) | Cod sursa (job #1364284) | Cod sursa (job #2750018) | Cod sursa (job #638909)
Cod sursa(job #638909)
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
ifstream in("portal3.in");
ofstream out("portal3.out");
const int N = 5;
long long n, m;
long long a[N], b[N];
long long pa[N], pb[N], pc[N];
long long c[N][N];
long long sol[N];
bool used[N];
long long best = 10000 * 1000000;
void Read()
{
in >> n >> m;
a[4] = n, b[4] = m;
for (int i = 1; i <= 3; ++i)
in >> pa[i] >> pb[i] >> a[i] >> b[i] >> pc[i];
}
void GetCosts()
{
for (int i = 1; i <= 4; ++i)
for (int j = 0; j <= 3; ++j)
{
long long v1, v2 = 10000 * 1000000;
v1 = abs(a[i] - a[j]) + abs(b[i] - b[j]);
if (i != 4)
v2 = abs(pa[i] - a[j]) + abs(pb[i] - b[j]) + pc[i];
c[j][i] = (v1<v2 ? v1:v2);
}
}
void Check(int pos)
{
long long rez = 0;
for (int i = 1; i < pos; ++i)
rez += c[sol[i-1]][sol[i]];
if (rez < best)
best = rez;
}
void Back(int pos)
{
if (used[4])
{
Check(pos);
return;
}
for (int i = 1; i <= 4; ++i)
if (!used[i])
{
sol[pos] = i;
used[i] = true;
Back(pos+1);
used[i] = false;
}
}
long long Solve()
{
best = 10000 * 1000000;
Read();
GetCosts();
memset(used, 0, sizeof(used));
Back(1);
return best;
}
int main()
{
int t;
in >> t;
while (t--)
out << Solve() << "\n";
return 0;
}