Pagini recente » kidsim2 | Cod sursa (job #2039037) | Cod sursa (job #2583014) | Cod sursa (job #1455101) | Cod sursa (job #639411)
Cod sursa(job #639411)
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
struct porty
{
int x1,y1,x2,y2,c;
};
struct pct
{
int x,y;
};
int main()
{
ifstream fi("portal3.in");
ofstream fo("portal3.out");
int t,T,i,j,k,m,n,tmin;
pct cu;
porty p[8];
fi>>T;
while(T)
{
fi>>n>>m;
tmin = m + n;
for(i = 1; i <= 3; i++)
{
fi>>p[i].x1>>p[i].y1>>p[i].x2>>p[i].y2>>p[i].c;
p[i + 3].x1 = p[i].x2;
p[i + 3].y1 = p[i].y2;
p[i + 3].x2 = p[i].x1;
p[i + 3].y2 = p[i].y1;
p[i + 3].c = p[i].c;
}
for(i = 0; i <= 6; i++)
for(j = 0; j <= 6; j++)
for(k = 0; k <= 6; k++)
{
if((i == j && i != 0) || (i == k && i != 0) || (j == k && j != 0))
continue;
cu.x = 0;
cu.y = 0;
t = 0;
if(i)
{
//mergem pana la intrarea in portalul i
t += abs(cu.x - p[i].x1) + abs(cu.y - p[i].y1);
//teleportarea
t += p[i].c;
cu.x = p[i].x2;
cu.y = p[i].y2;
}
if(j)
{
//mergem pana la intrarea in portalul j
t += abs(cu.x - p[j].x1) + abs(cu.y - p[j].y1);
//teleportarea
t += p[j].c;
cu.x = p[j].x2;
cu.y = p[j].y2;
}
if(k)
{
//mergem pana la intrarea in portalul k
t += abs(cu.x - p[k].x1) + abs(cu.y - p[k].y1);
//teleportarea
t += p[k].c;
cu.x = p[k].x2;
cu.y = p[k].y2;
}
t += abs(n - cu.x) + abs(m - cu.y);
if(t < tmin)
tmin = t;
}
fo<<tmin<<'\n';
T--;
}
}