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; } } }
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; }