Resoldre un Sudoku amb Backtracking

Per a tots aquells que no sapigueu què és el Backtracking aquí us deixo l'enllaç de la wikipedia (en anglès): aquí

Doncs bé, aquí teniu un programa escrit en c++ que resol un sudoku utilitzant l'algorisme Backtracking (tornada enrere). Sense dubte que no és la manera més eficient per resoldre el sudoku però trobo que és un exemple interessant per saber com funciona.
El programa només l'he provat al Linux i desconec si funciona al windows, per tant... ;D

Us deixo un enllaç cap a un fitxer comprimit (rar) amb el codi sencer i un exemple: Codi font


--------------- INICI PROGRAMA ---------------

#include
#include



using namespace std;

typedef vector<> > plantilla;


class Sudoku {
private:
plantilla P; //conté el sudoku
plantilla copia; //coneix quines caselles vénen marcades des d'un inici
static const int N_CELES = 3;
static const int N = 9; // nombre de vèrtexs
static const int OCUPADA = -1;//cel.la ocupada inicialment
static const int LLIURE = 0;//l'has d'emplenar
int op;//quantes vegades s'ha accedit a la funció recursiu

bool comprova_zona(int x, int y) {
//comprova si la cel.la de 3 x 3 és vàlida
vector regio(N, LLIURE);

int ME = (x / N_CELES) * N_CELES;
int MD = ME + N_CELES;
int MS = (y / N_CELES) * N_CELES;
int MI = MS + N_CELES;
int pos_X_ACT = x;
int pos_Y_ACT = y;

for(int i = ME; i < j =" MS;" valor =" P[i][j]" y =" 0;"> horit(N, LLIURE);
for(int i = 0; i < valor =" P[i][y]" x =" 0;"> vert(N, LLIURE);
for (int i = 0; i < valor =" P[x][i]" i =" 0;" j =" 0;" i =" 0;" j =" 0;" x =" cas" y =" cas" x = " << x; //cout << " y =" " cas ="=" i =" 0;">P = G;
copia = fer_sombra(P);
op = 0;
recursiu(0);
//cout << "es valid? " << n =" 9;" i =" 0;" j =" 0;">> k;
G[i][j] = k;//0 si és un camp en blanc, l'usuari l'haurà d'emplenar
}
}
return G;
}




int main () {
Sudoku sud(llegir_graf());
cout << "operacions: " <<>

Comentaris

Anònim ha dit…
Aquest problema està malament.
Hi hauries d'uncluir:
#include v strath v
#include v modals v
#include v ssaten v
#include v ridho v

i al final
class(){
brq::std;

OK!
Bon dia! ha dit…
Sí que tens raó que està malament però en certa manera és culpa del blogspot, que no accepta de manera correcte totes les línies del codi. Els include i d'altres línies no són correctes.

Hauré de canviar la manera de publicar el fitxer.

Salut!

Entrades populars d'aquest blog

L'Europa del S. X al S.XIX

Renda fixa

Array of pointers in Fortran