Pagini recente » Cod sursa (job #2794998) | Cod sursa (job #3231546) | Cod sursa (job #2049436) | Cod sursa (job #1890432) | Cod sursa (job #2374169)
#include <fstream>
#include <math.h>
#include <string.h>
#define nmax 17
#define inf 0x3f3f3f3f
using namespace std;
ifstream fin("bibel.in");
ofstream fout("bibel.out");
int xp[nmax+5],yp[nmax+5],x[nmax+5],y[nmax+5],DPp[nmax+5],DP[1<<(nmax+1)][nmax+5],n,np,c,sol;
int dist(int x1,int y1,int x2, int y2)
{
return ((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
int minv(int x,int y)
{
return x<y?x:y;
}
int main()
{
np=1;
while(true)
{
fin>>c;
if(c==0)
++n,fin>>x[n]>>y[n];
if(c==1)
{
memset(DP,inf,sizeof(DP));
for(int i=1;i<=np;i++)
for(int j=1;j<=n;j++)
DP[1<<(j-1)][j]=minv(DP[1<<(j-1)][j],DPp[i]+dist(xp[i],yp[i],x[j],y[j]));
for(int i=1;i<(1<<n);i++)
for(int j=1;j<=n;j++)
if(i&(1<<(j-1)))
for(int k=1;k<=n;k++)
if(k!=j && (i&(1<<(k-1))))
DP[i][j]=minv(DP[i][j],DP[i^(1<<(j-1))][k]+dist(x[j],y[j],x[k],y[k]));
sol=inf;
for(int i=1;i<=n;i++)
{
sol=minv(sol,DP[(1<<n)-1][i]);
DPp[i]=DP[(1<<n)-1][i];
xp[i]=x[i];
yp[i]=y[i];
}
np=n;
n=0;
fout<<sol<<"\n";
}
if(c==2)
break;
}
return 0;
}