Na faculdade, na aula de programação a professora nos pediu para gerarmos um sudoku válido. Depois de tantas tentativas sem sucesso, encontrei este algoritmo polinomial em Java(que pode ser facilmente traduzido para C++) na Wikipedia:
final int n = 3;//aqui vai o numero de elementos do seu sudoku(3 vai ser um sudoku 3x3 final int[][] field = new int[n*n][n*n];//matriz onde será armazenado o sudoku int x = rand()%10;//semente aleatória para não gerar o mesmo sudoku for(int i = 0; i < n; i++, x++) for(int j = 0; j < n; j++, x+=n) for(int k = 0; k < n*n; k++, x++) field[n*i+j][k] = (x % (n*n)) + 1;