Pagini recente » Rating Pop Daniela (popdany) | Cod sursa (job #2200570) | Cod sursa (job #2783236) | Cod sursa (job #610164) | Cod sursa (job #1723649)
#include <fstream>
using namespace std;
ifstream f("bibel.in");
ofstream g("bibel.out");
const int f_mare = 10000000;
int xx, x[20], y[20], n;
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;
int mat[(1 << (n))+5][19];
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;
}