Pagini recente » Cod sursa (job #63011) | Cod sursa (job #6915) | Cod sursa (job #1741701) | Cod sursa (job #2041481) | Cod sursa (job #550695)
Cod sursa(job #550695)
// Time Complexity: O(N^4) = O(N) * O(Bellman-Ford = O(N^3))
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define NMAX 111
#define NPERM 1000
#define INF 666666666
int C[NMAX][NMAX], p[NMAX], luat[NMAX];
int N, sum, min, minsum;
int main()
{
int i, j, k, c;
freopen("cc.in", "r", stdin);
freopen("cc.out", "w", stdout);
scanf("%d", &N);
for (i = 1; i <= N; i++)
for (j = 1; j <= N; j++)
scanf("%d", &C[i][j]);
minsum = INF;
srand(time(NULL));
for (k = 0; k < NPERM; k++)
{
for (i = 1; i <= N; i++)
luat[i] = 0;
for (i = 1; i <= N; i++)
{
do
{
j = 1 + (rand() % N);
}
while (luat[j]);
p[i] = j;
luat[j] = 1;
}
for (i = 1; i <= N; i++)
luat[i] = 0;
sum = 0;
for (i = 1; i <= N; i++)
{
min = INF;
for (j = 1; j <= N; j++)
if (!luat[j] && C[p[i]][j] < min)
min = C[p[i]][j],
c = j;
sum += min;
luat[c] = 1;
}
if (sum < minsum)
minsum = sum;
}
printf("%d\n", minsum);
return 0;
}