Pagini recente » Cod sursa (job #873101) | Cod sursa (job #1193234) | Cod sursa (job #2883426) | Arhiva Educationala | Cod sursa (job #5156)
Cod sursa(job #5156)
#include <stdio.h>
#define FIN "cc.in"
#define FOUT "cc.out"
#define nmax 121
int a[nmax][nmax], d[nmax], v[nmax], s, k, n,
i, j, io, lio, co, R, u, jo, uo, c;
void calcul ()
{
d[1] = 1;
v[1] = 1;
s = a[1][1];
for (k = 2; k <= n; k++)
{
lio = a[1][k] + a[k][d[1]] - a[1][d[1]];
io = 1;
co = d[io];
j = d[io];
for (i = 1; i < k; i++)
{
j = d[i];
R = a[i][k] + a[k][j] - a[i][j];
if (R < lio)
{
lio = R;
io = i;
j = d[i];
co = j;
jo = 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 < lio)
{
lio = R;
co = c;
io = i;
uo = u;
jo = j;
}
}
}
if (lio >= a[k][k])
{
s += a[k][k];
d[k] = k;
v[k] = k;
}
else
{
s += lio;
if (co == jo)
{
d[io] = k;
d[k] = co;
v[co] = io;
v[k] = io;
}
else
{
d[io] = k;
v[k] = io;
d[uo] = jo;
v[jo] = uo;
d[k] = co;
v[co] = k;
}
}
}
}
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]);
}
calcul();
printf ("%d\n", s);
//for (i = 1; i <= n; i++)
// printf ("%d ", d[i]);
return 0;
}