Cod sursa(job #636083)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 19 noiembrie 2011 16:56:11
Problema Portal3 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 1.52 kb
#include<fstream>
using namespace std;
struct Punct
{
    long long x,y;
};
struct Portal
{
    Punct init,Destinatie;
    long long timp;
};
long long abs(long long x)
{
    if(x<0)
     return x*(-1);
    return x;
}
long long dist(Punct a,Punct b)
{
    return abs(a.x-b.x)+abs(a.y-b.y);
}
Punct final;
Portal portale[4];
long long dmin=-1;
ifstream q("portal3.in");
ofstream w("portal3.out");
void back(Punct start,long long pasi, bool trecutprin[4])
{
    long long d1=pasi+dist(start,final);
    if(d1<dmin||dmin==-1)
    {
        dmin=d1;
    }
    for(long 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 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;
}