Pagini recente » Cod sursa (job #1312849) | Cod sursa (job #2665175) | Cod sursa (job #1279039) | Cod sursa (job #918031) | Cod sursa (job #1723651)
#include <fstream>
using namespace std;
ifstream f("bibel.in");
ofstream g("bibel.out");
const int f_mare = 10000000;
int xx, x[25], y[25], n;
int mat[260000][25];
inline int dist(int i, int j){
return (x[j]-x[i])*(x[j]-x[i]) + (y[j]-y[i])*(y[j]-y[i]);
}
int rezolva(){
int i, j, k;
for (i = 0; i < (1 << n); i++)
for (j = 0; j < n; j++)
mat[i][j] = f_mare;
for (i = 0; i < n; i++)
mat[(1 << i)][i] = dist(-1, i);
for (i = 1; i < (1 << n); i++)
for (j = 0; j < n; j++)
if (i & (1 << j))
for (k = 0; k < n; k++)
if (i & (1 << k) && k != j)
mat[i][j] = min(mat[i][j], mat[i^(1<<j)][k] + dist(k, j));
int minim = f_mare;
for (i = 0; i < n; i++)
minim = min(minim, mat[(1 << n)-1][i]);
return minim;
}
int main(){
while (1){
f >> xx;
if (xx == 0){
f >> x[n] >> y[n];
n++;
}
else if (xx == 1){
g << rezolva() << '\n';
//n = 0;
}
else if (xx == 2)
break;
}
return 0;
}