Pagini recente » Cod sursa (job #2618138) | Cod sursa (job #60086) | Cod sursa (job #180368) | Cod sursa (job #1483699) | Cod sursa (job #353081)
Cod sursa(job #353081)
#include<stdio.h>
#define dim 10000
#define infinit 10001
using namespace std;
short int C[18][dim],n;//, D[dim];
struct vector
{
short int x, y;
};
/*int distanta(vector X, vector Y)
{ int d;
d = (X.x - Y.x)*(X.x - Y.x) + (X.y - Y.y)*(X.y - Y.y);
return d;
}*/
int min(int a, int b)
{
if(a < b) return a;
return b;
}
int main()
{ int i,j,t,c,d,a,b,n1, min1, min2;
FILE *f = fopen("bibel.in", "r");
FILE *g = fopen("bibel.out", "w");
vector V[dim];
c = 0; n = 0; n1 = 1;
while(c != 2) //citirea din fisier
{
fscanf(f, "%d", &c);
if(c == 0)
{
n++;
fscanf(f, "%hd%hd", &V[n].x, &V[n].y);
}
else if(c == 2) break;
else
{
//initializarea cu infinit
for(i = 1; i <= n; i++)
for(j = 1; j <= 1<<(n); j++)
C[i][j] = infinit;
for(i = 1; i <= n1; i++)
for(j = 1; j <= n; j++)
{
d = (V[i].x - V[j].x)*(V[i].x - V[j].x) + (V[i].y - V[j].y)*(V[i].y - V[j].y);
C[j][1<<(n-j)] = min(C[j][1<<(n-j)] + V[i].x, d);// + D[i]);
}
//a = i&(1<<(n-j));
for(i = 1; i <= 1<<(n); i++)
for(j = 1; j <= n; j++)
{a = i&(1<<(n-j));
if(a)
for(t = 1; t <= n; t++)
{
b = i&(1<<(n-t));
if(!b)
{
d = (V[j].x - V[t].x)*(V[j].x - V[t].x) + (V[j].y - V[t].y)*(V[j].y - V[t].y);
C[n-t][b] = min(C[n-t][b], C[n-j][t] + d);
}
}
}
min1 = min2 = infinit;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
{
if(C[i][j] < min1) min2 = min1, min1 = C[i][j];
else if(C[i][j] < min2) min2 = C[i][j];
n1 = n;
}
fprintf(g, "%d\n", min1+min2);
}
}
fclose(f);
fclose(g);
return 0;
}