Pagini recente » Cod sursa (job #3178175) | Cod sursa (job #3192340) | Cod sursa (job #1023699) | Cod sursa (job #1007414) | Cod sursa (job #1738392)
#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;
}