Pagini recente » Cod sursa (job #2999556) | Cod sursa (job #2780676) | Cod sursa (job #722507) | Cod sursa (job #2749014) | Cod sursa (job #636033)
Cod sursa(job #636033)
#include<fstream>
using namespace std;
struct Punct
{
long x,y;
};
struct Portal
{
Punct init,Destinatie;
long timp;
};
long abs(long x)
{
if(x<0)
return x*(-1);
return x;
}
long dist(Punct a,Punct b)
{
return abs(a.x-b.x)+abs(a.y-b.y);
}
Punct final;
Portal portale[4];
long dmin=-1;
ifstream q("portal3.in");
ofstream w("portal3.out");
void back(Punct start,long pasi, bool trecutprin[4])
{
long d1=pasi+dist(start,final);
if(d1<dmin||dmin==-1)
{
dmin=d1;
}
for(long i=1; i<=3; i++)
if(trecutprin[i]==false)
{
trecutprin[i]=true;
d1=dist(start,portale[i].init);
back(portale[i].Destinatie,pasi+d1+portale[i].timp,trecutprin);
d1=dist(start,portale[i].Destinatie);
//back(portale[i].init,pasi+d1+portale[i].timp,trecutprin);
trecutprin[i]=false;
}
}
int main()
{
long i,k,n,m,t;
bool vid[4]= {false,false,false,false};
Punct p1,p2;
Portal put;
q>>t;
for(k=1; k<=t; k++)
{
q>>n>>m;
final.x=n;
final.y=m;
for(i=1; i<=3; i++)
{
q>>p1.x>>p1.y>>p2.x>>p2.y>>put.timp;
put.init=p1;
put.Destinatie=p2;
portale[i]=put;
}
Punct start;
start.x=0;
start.y=0;
dmin=-1;
back(start,0,vid);
w<<dmin<<"\n";
}
return 0;
}