Cod sursa(job #550695)

Utilizator cont_de_testeCont Teste cont_de_teste Data 9 martie 2011 20:59:41
Problema Cc Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
// 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;
}