Cod sursa(job #1738392)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 6 august 2016 16:54:23
Problema Portal3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<cstdio>
#include<vector>
#include<cstring>
#define INF 2000000001
using namespace std;
int seen[8],answer,d[8][8],x[8],y[8];
vector<int> v;
int Abs(int x){
    if(x<0)
        return -x;
    return x;
}
int Distance(int a,int b){
    if(d[a][b]!=-1)
        return d[a][b];
    return Abs(x[a]-x[b])+Abs(y[a]-y[b]);
}
void Backtracking(int value){
    int add,i;
    if(value>=answer)
        return;
    if(v.back()==7){
        answer=value;
        return;
    }
    for(i=1;i<=7;i++)
        if(seen[i]==0){
            add=Distance(v.back(),i);
            if(add>INF)
                add=INF;
            value+=add;
            seen[i]=1;
            v.push_back(i);
            Backtracking(value);
            value-=add;
            seen[i]=0;
            v.pop_back();
        }
}
int main(){
    freopen("portal3.in","r",stdin);
    freopen("portal3.out","w",stdout);
    int tests,test,i,c;
    scanf("%d",&tests);
    for(test=1;test<=tests;test++){
        scanf("%d%d",&x[7],&y[7]);
        memset(d,-1,sizeof(d));
        for(i=1;i<7;i+=2){
            scanf("%d%d%d%d%d",&x[i],&y[i],&x[i+1],&y[i+1],&c);
            d[i][i+1]=d[i+1][i]=c;
        }
        answer=INF;
        v.push_back(0);
        Backtracking(0);
        printf("%d\n",answer);
    }
    return 0;
}