Pagini recente » Cod sursa (job #2368686) | Cod sursa (job #3213120) | Cod sursa (job #1149397) | Cod sursa (job #1762797) | Cod sursa (job #120345)
Cod sursa(job #120345)
#include<stdio.h>
long long int cod,i,sol,
xv[20],yv[20],dv[20],nv,
xn[20],yn[20],dn[20],nn,
xc[20],yc[20],dc[20],
dnn[20][20],dvn[20][20],
viz[20],b[20],ddn[20][20],j,k,dist;
void solve(long long int poz);
int main()
{
FILE *f,*g;f=fopen("bibel.in","r");g=fopen("bibel.out","w");
nv=1;xv[1]=0;yv[1]=0;
for(i=1;i<20;i++)dnn[i][i]=1000000000;
do
{
fscanf(f,"%lld",&cod);
if(cod==0){nn++;fscanf(f,"%lld%lld",&xn[nn],&yn[nn]);dn[nn]=1000000000;}
else
if(cod==1)
{ for(i=1;i<=nv;i++)
for(j=1;j<=nn;j++)
dvn[i][j]=(xv[i]-xn[j])*(xv[i]-xn[j])+(yv[i]-yn[j])*(yv[i]-yn[j]);
for(i=1;i<nn;i++)
for(j=i+1;j<=nn;j++)
{ ddn[i][j]=(xn[i]-xn[j])*(xn[i]-xn[j])+(yn[i]-yn[j])*(yn[i]-yn[j]);
ddn[j][i]=ddn[i][j];
}
for(i=1;i<nn;i++)
for(j=i+1;j<=nn;j++)
{ b[1]=i;b[nn]=j;dnn[i][j]=1000000000;
viz[i]=1;viz[j]=1;
solve(2);
dnn[j][i]=dnn[i][j];
viz[i]=0;viz[j]=0;
}
for(i=1;i<=nn;i++)
{ dn[i]=1000000000;
for(j=1;j<=nn;j++)
for(k=1;k<=nv;k++)
{ dist=dv[k]+dvn[k][j]+dnn[j][i];
if(dist<dn[i])dn[i]=dist;
}
}
sol=dn[1];for(i=1;i<=nn;i++)if(sol>dn[i])sol=dn[i];
for(i=1;i<=nn;i++)
{ xv[i]=xn[i];xn[i]=0;
yv[i]=yn[i];yn[i]=0;
dv[i]=dn[i];dn[i]=0;
}
nv=nn;nn=0;
fprintf(g,"%lld\n",sol);
}
}while(cod!=2);
fcloseall();
return 0;
}
void solve(long long int poz)
{ long long int il;
if(poz==nn)
{ dc[nn]=dc[poz-1]+ddn[b[nn-1]][j];
if(dc[nn]<dnn[i][j])
dnn[i][j]=dc[poz];
dc[poz]=0;
return;
}
for(il=1;il<=nn;il++)
{ if(!viz[il])
{ viz[il]=1;
b[poz]=il;
dc[poz]=dc[poz-1]+ddn[il][b[poz-1]];
if(dc[poz]<dnn[i][j])solve(poz+1);
dc[poz]=0;
b[poz]=0;
viz[il]=0;
}
}
}