Algoritmo para gerar um sudoku NxN válido.

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;