Pagini recente » Cod sursa (job #2141276) | Cod sursa (job #1333016) | Cod sursa (job #10558) | Cod sursa (job #2954851) | Cod sursa (job #2285698)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bibel.in");
ofstream fout("bibel.out");
#define INF 1000000
int n,i,j,x,y,k,sol;
struct punct{int x,y;}rep[20];
int cost[20][20];
int lantMin[1<<17][19];
void reset()
{
n=0;
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
cost[i][j]=INF;
for(int i=0;i<1<<17;i++)
for(int j=0;j<20;j++)
lantMin[i][j]=INF;
}
int mod(int x)
{
if(x<0)return -x;
return x;
}
void afis()
{
for(int i=0;i<1<<n;i++)
{
cout<<i<<" ";
for(int j=0;j<n;j++)
if(lantMin[i][j]==INF)
cout<<"x ";
else
cout<<lantMin[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}
int main()
{
reset();
while(fin>>k)
{
if(k==2)
return 0;
if(k==0)
fin>>rep[n++].x>>rep[n].y;
if(k==1)
{
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
cost[i][j]=
cost[j][i]=(rep[i].y-rep[j].y)*(rep[i].y-rep[j].y)+
(rep[i].x-rep[j].x)*(rep[i].x-rep[j].x);
for(i=0;i<n;i++)
lantMin[1<<i][i]=0;
for(i=1;i<1<<17;i++)
for(j=0;j<n;j++)
if(i&(1<<j))
for(k=0;k<n;k++)
if(i&(1<<k))
lantMin[i][j]=min(lantMin[i][j],
lantMin[i^(1<<j)][k]+cost[k][j]);
afis();
sol=INF;
for(i=0;i<n;i++)
sol=min(sol,
lantMin[(1<<n)-1][i]);
fout<<sol<<'\n';
// reset();
}
}
return 0;
}