Pagini recente » Cod sursa (job #2771734) | Cod sursa (job #3162915) | Cod sursa (job #2213722) | Cod sursa (job #580104) | Cod sursa (job #635685)
Cod sursa(job #635685)
#include<stdio.h>
#include <stdlib.h>
using namespace std;
struct Punct
{
long x,y;
};
struct Portal
{
Punct init,Destinatie;
long timp;
};
Punct final;
Portal portale[4];
long dist(Punct a,Punct b)
{
return abs(a.x-b.x)+abs(a.y-b.y);
}
long dmin=-1;
void back(Punct start,long pasi, long trecutprin[4])
{
long d1=pasi+dist(start,final);
long backu[4];
backu[1]=trecutprin[1];
backu[2]=trecutprin[2];
backu[3]=trecutprin[3];
if(d1<dmin||dmin==-1)
{
dmin=d1;
}
for(long i=1; i<=3; i++)
if(trecutprin[i]==false)
{
trecutprin[i]=true;
backu[i]=true;
d1=dist(start,portale[i].init);
back(portale[i].Destinatie,pasi+d1+portale[i].timp,trecutprin);
for(long j=1; j<=3; j++)
trecutprin[j]=backu[j];
d1=dist(start,portale[i].Destinatie);
back(portale[i].init,pasi+d1+portale[i].timp,trecutprin);
for(long j=1; j<=3; j++)
trecutprin[j]=backu[j];
}
}
int main()
{
FILE *q,*w;
q=fopen("portal3.in","r");
w=fopen("portal3.out","w");
long k,n,m,t;
fscanf(q,"%ld",&t);
for(k=1; k<=t; k++)
{
fscanf(q,"%ld%ld",&n,&m);
final.x=n;
final.y=m;
Punct p1,p2;
for(long i=1; i<=3; i++)
{
long ttimp;
fscanf(q,"%ld %ld %ld %ld %ld",&p1.x,&p1.y,&p2.x,&p2.y,&ttimp);
Portal put;
put.init=p1;
put.Destinatie=p2;
put.timp=ttimp;
portale[i]=put;
}
Punct start;
start.x=0;
start.y=0;
dmin=-1;
long vid[4]= {false,false,false,false};
back(start,0,vid);
fprintf(w,"%ld\n",dmin);
}
return 0;
}