示例#1
0
void sudoku:: colocarPistas(int matriz[9][9], int matrizSudoku[9][9], int numPistas){
    copiarMatriz(matriz,matrizSudoku);
    int i=0,j=0,x=0,y=0,cont=0;
    QTime time = QTime::currentTime();
    qsrand (time.msec());
    int random;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            while(cont<=numPistas){
                for(x=0;x<9;x++){
                    for(y=0;y<9;y++){
                        if(cont<=numPistas){
                            if(i==(x/3) && j==(y/3)){
                                random = qrand()%2;
                                //vaciar=rnd.nextInt(2);
                                if (random==1){
                                    matrizSudoku[x][y]=0;
                                    cont++;
                                }
                            }
                        }
                    }
                }
            }
            cont=0;
        }
    }
}
示例#2
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;

}