Pagini recente » Cod sursa (job #31311) | Cod sursa (job #917493) | Cod sursa (job #3229582) | Cod sursa (job #440615) | Cod sursa (job #1456392)
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define st first
#define nd second
using namespace std;
ifstream fin("bibel.in");
ofstream fout("bibel.out");
const int Dim = 1 << 17;
const int INF = 0x3f3f3f3f;
int Path[Dim][17];
pair < int,int > B[18];
inline int Dst(pair < int,int > A,pair < int,int > B)
{
return (A.st - B.st) * (A.st - B.st) + (A.nd - B.nd) * (A.nd - B.nd);
}
inline int Min(int A,int B)
{
return (A < B) ? A : B;
}
int main()
{
int N,Op,Sol;
do
{
N = 0;
do
{
fin >> Op;
if (Op == 0)
{
N++;
fin >> B[N].st >> B[N].nd;
}
}while(Op == 0);
B[0] = mp(0,0);
for (int i = 0;i < (1 << N);i++)
for (int j = 0;j < N;j++)
Path[i][j] = INF;
Path[1][0] = 0;
for (int i = 0;i < (1 << N);i++)
for (int j = 0;j < N;j++)
if (i & (1 << j))
for (int k = 0;k < N;k++)
if (i & (1 << k))
Path[i][j] = Min(Path[i][j],Path[i ^ (1 << j)][k] + Dst(B[k],B[j]));
/**for (int i = 0;i < (1 << N);i++){
for (int j = 0;j < N;j++)fout << Path[i][j] << " ";
fout << "\n";
}**/
if (Op == 1)
{
Sol = INF;
for (int i = 0;i < N;i++)
Sol = Min(Sol,Path[(1 << N) - 1][i]);
fout << Sol << "\n";
}
}while(Op == 1);
}