Pagini recente » Cod sursa (job #2717502) | Cod sursa (job #3225702) | Cod sursa (job #933522) | Cod sursa (job #1167161) | Cod sursa (job #143782)
Cod sursa(job #143782)
#include <stdio.h>
#include <math.h>
#include <string.h>
#define mare 1000000000
long num, v[32], q1[32], w1[32], n, q2[32], w2[32], c[131072][18], dpn, rez, i, j, x, k, j2, k2;
void copy() {
memcpy(q1, q2, sizeof(q1));
memcpy(w1, w2, sizeof(w1));
}
void afla1() {
while (1) {
scanf("%ld", &x);
if (x == 1) break;
++n;
scanf("%ld %ld", &q2[n], &w2[n]);
}
}
long MIN(long a, long b) {
if (a < b) {
return a;
}
return b;
}
void afla2() {
dpn = 1 << n;
for (i = 1; i < dpn; i++) {
for (j = 1, k = 1; j <= i; j <<= 1, ++k) {
if (j & i) {
c[i][k] = mare;
if (j == i) {
for (j2 = 1; j2 <= num; ++j2) {
c[i][k] = MIN(c[i][k], (long)(v[j2] + (q2[k] - q1[j2]) * (q2[k] - q1[j2]) + (w2[k] - w1[j2]) * (w2[k] - w1[j2])));
}
} else {
for (j2 = 1, k2 = 1; j2 <= i; j2 <<= 1, ++k2) {
if ((j2 & i) && j2 != j) {
c[i][k] = MIN(c[i][k], c[i ^ j][k2] + (q2[k] - q2[k2]) * (q2[k] - q2[k2]) + (w2[k] - w2[k2]) * (w2[k] - w2[k2]));
}
}
}
}
}
}
}
int main() {
freopen("bibel.in", "r", stdin);
freopen("bibel.out", "w", stdout);
for (i = 1; i < 20; i++) {
v[i] = mare;
}
v[1] = 0;
num = 1;
while (1) {
scanf("%ld", &x);
if (x == 2) {
break;
}
n = 1;
scanf("%ld %ld", &q2[1], &w2[1]);
afla1();
afla2();
num = n;
copy();
rez = mare;
for (i = 1; i <= n; ++i) {
v[i] = c[dpn - 1][i];
if (v[i] < rez) {
rez = v[i];
}
}
printf("%ld \n", rez);
}
return 0;
}