Pagini recente » Cod sursa (job #1809352) | Cod sursa (job #229575) | Cod sursa (job #3282137) | Cod sursa (job #915414) | Cod sursa (job #5279)
Cod sursa(job #5279)
#include <stdio.h>
#define FIN "cc.in"
#define FOUT "cc.out"
#define nmax 101
int a[nmax][nmax], d[nmax], v[nmax], s, k, n,
i, j, i2, li2, c2, R, u, j2, u2, c;
int
main ()
{
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
scanf ("%d", &n);
for (i = 1; i <= n; i++)
{
scanf ("\n");
for (j = 1; j <= n; j++)
scanf ("%d ", &a[i][j]);
}
if (n == 0)
while (!d[1]);
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (a[i][j] == 0)
while (!d[1]);
d[1] = 1;
v[1] = 1;
s = a[1][1];
for (k = 2; k <= n; k++)
{
li2 = a[1][k] + a[k][d[1]] - a[1][d[1]];
i2 = 1;
c2 = d[i2];
j = d[i2];
for (i = 1; i < k; i++)
{
j = d[i];
R = a[i][k] + a[k][j] - a[i][j];
if (R < li2)
{
li2 = R;
i2 = i;
j = d[i];
c2 = j;
j2 = j;
}
for (c = 1; c < k; c++)
if (c - j)
{
u = v[c];
R = a[i][k] + a[k][c] - a[i][j] - a[u][c] + a[u][j];
if (R < li2)
{
li2 = R;
c2 = c;
i2 = i;
u2 = u;
j2 = j;
}
}
}
if (li2 >= a[k][k])
{
s += a[k][k];
d[k] = k;
v[k] = k;
}
else
{
s += li2;
if (c2 == j2)
{
d[i2] = k;
d[k] = c2;
v[c2] = i2;
v[k] = i2;
}
else
{
d[i2] = k;
v[k] = i2;
d[u2] = j2;
v[j2] = u2;
d[k] = c2;
v[c2] = k;
}
}
}
printf ("%d\n", s);
//for (i = 1; i <= n; i++)
// printf ("%d ", d[i]);
return 0;
}