Exemple #1
0
int* nearestNeighbor(int primeira_cidade, int n, float** matriz, int* valor){
	float** matriz_aux;
	float* vetor;
	int* caminho = (int*)malloc(n*sizeof(int));
	int i, j, indice_menor = primeira_cidade-1; //esse -1 serve para "adequar" a leitura de vetores/matrizes
	float soma = 0, aux;

	matriz_aux = alocarMatriz(n);
	matriz_aux = copiarMatriz(n, matriz);

	for (i=0;i<n-1;i++){
		//inicia construindo o caminho, gravando a primeira cidade
		caminho[i]=indice_menor;

		for (j=0;j<n;j++){
			matriz_aux[j][indice_menor] = FLT_MAX;
		}

	 	vetor = matriz_aux[indice_menor];
	 	aux = menor(vetor, n, &indice_menor); //acha o menor valor da linha da matriz
		soma = soma + aux; // soma esses valores

		
	}

	//recebe o ultimo indice, ou seja, a ultima cidade do caminho antes de voltar para o ciclo
	caminho[i]=indice_menor;

	//soma a volta para a primeira cidade
	soma = soma + matriz[indice_menor][primeira_cidade-1];
	
	if(valor != NULL)
		(*valor) = soma;

	//libera vetores temporariamente alocados para calculo
	liberarMatriz(n, matriz_aux);

	return caminho;

}
Exemple #2
0
altoCalculamiento::~altoCalculamiento()
{
	liberarMatriz(S);
}