Cod sursa(job #1320747)

Utilizator heracleRadu Muntean heracle Data 18 ianuarie 2015 14:20:28
Problema Portal3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <cstdio>

FILE* in=fopen("portal3.in","r");
FILE* out=fopen("portal3.out","w");

struct port{
    int x,y;
    int gx,gy;
    int cost;
    int comp;
} v[8];

bool use[8];

long long rez;

long long mod(long long x)
{
    return x<0?-x:x;
}

void back(int p, long long act)
{
    if(p==7)
    {
        if(act<rez)
            rez=act;
        return;
    }

    for(int i=1; i<=7; i++)
    {
        if(use[i]==0)
        {
            use[i]=1;
            use[v[i].comp]=1;

            back(v[i].comp,act+v[i].cost+mod(v[p].x-v[i].x)+mod(v[p].y-v[i].y));

            use[i]=0;
            use[v[i].comp]=0;
        }
    }
}

void rezolv()
{
    int n,m;

    fscanf(in,"%d%d",&n,&m);

    int a,b,c,d,e;

    rez=2000000000;

    for(int i=1; i<=3; i++)
    {
        fscanf(in,"%d%d%d%d%d",&a,&b,&c,&d,&e);
        v[i*2-1].x=a;
        v[i*2-1].y=b;
        v[i*2-1].gx=c;
        v[i*2-1].gy=d;
        v[i*2-1].cost=e;
        v[i*2-1].comp=i*2;

        v[i*2].gx=a;
        v[i*2].gy=b;
        v[i*2].x=c;
        v[i*2].y=d;
        v[i*2].cost=e;
        v[i*2].comp=i*2-1;
    }

    v[0].x=0;
    v[0].y=0;
    v[0].gx=0;
    v[0].gy=0;
    v[0].cost=0;
    v[0].comp=0;


    v[7].x=n;
    v[7].y=m;
    v[7].gx=n;
    v[7].gy=m;
    v[7].cost=0;
    v[7].comp=7;

    use[0]=1;
    back(0,0);
    use[0]=0;

    fprintf(out,"%lld\n",rez);

}

int main()
{
    int t;

    fscanf(in,"%d",&t);

    for(int i=1; i<=t; i++)
    {
        rezolv();
    }

    return 0;
}