questi sono i 3 file mi da problema con items mi dice was not declared in this scope, lo dichiaro nel main ma nemmeno funziona e tra l' altro la cosa non ha senso dal momento che lo ho dichiarato nella superclasse vector2d e passato alla classe sudoku con l' ereditarietà.
classi.h
main.cppcodice:#include <iostream> #include <cstdio> #include <string> #include <cstdlib> #include<fstream> #include<math.h> #include<iomanip> #include<vector> using namespace std; typedef vector< vector <int> > vettore; const int UNASSIGNED =0; class vector2d{ public: vettore items; void StampaGriglia(vettore,int ,int &); void Crea_griglia(vettore &,int &); }; class Sudoku: public vector2d { private: int rig,col,num,SettoreInizioRig,SettoreInizioCol; bool CercaNonAssegnate(vettore, int &, int &,int ); bool NumCerto(vettore, int , int , int ,int ); bool UsedInRig(vettore, int , int ,int ); bool UsedInCol(vettore, int , int ,int ); bool UsedInBox(vettore, int , int , int ,int ); public: bool SudokuSolver(vettore,int ,int &); };
sudoku.cppcodice:#include "classi.h" int main() { int cont=0; int n=0; vector2d s;//dichiaro una variabile di tipo sudoku per richiamare i metodi della classe Sudoku v; s.Crea_griglia(items,n); if (v.SudokuSolver(items,n,cont) == true){// se il metodo SudokuSolver mi ritorna vero allora stampa la soluzione cout<<"\n\nLa soluzione del sudoku e': \n"; s.StampaGriglia(items,n,cont); cout<<"\n\nSoluzione Trovata dopo "<<cont<<" cicli\n\n"; } else cout<<"Non esistono soluzioni."<<endl; return 0; }
codice:#include "classi.h" bool Sudoku::SudokuSolver(vettore items,int n,int &cont) { cont++; if(cont%50000000==0){ cout<<"\n\nSoluzione parziale sudoku al ciclo "<<cont<<":\n\n"; StampaGriglia(items,n,cont); system("pause"); } int rig, col; if (!CercaNonAssegnate(items, rig, col,n))//valore sicuro assegnato non ci ripasso più return true; for (int num = 1; num <= n; num++) { if (NumCerto(items, rig, col, num,n)) { items[rig][col] = num; if (SudokuSolver(items,n,cont))//Backtracking: chiamata ricorsiva return true; items[rig][col] = UNASSIGNED; } } return false; } //Questo metodo mi cerca una cella non ancora assegnata bool Sudoku::CercaNonAssegnate(vettore items, int &rig, int &col,int n) { for (rig = 0; rig < n; rig++) for (col = 0; col < n; col++) if (items[rig][col] == UNASSIGNED)//quando trovo uno zero in una casella ritorno vero return true; return false; } //Questo metodo mi dice se quel numero è gia usato in quella riga bool Sudoku::UsedInRig(vettore items, int rig, int num,int n) { for (int col = 0; col < n; col++)//scorrendo le colonne vedo gli elementi della riga if (items[rig][col] == num) return true; return false; } //Questo metodo mi dice se quel numero è gia usato in quella colonna bool Sudoku::UsedInCol(vettore items, int col, int num,int n) { for (int rig = 0; rig < n; rig++)//scorrendo le righe vedo gli elementi della colonna if (items[rig][col] == num) return true; return false; } //Questo metodo mi dice se quel numero è gia usato in quel box //Per box intendo il settore considerato bool Sudoku::UsedInBox(vettore items, int SettoreInizioRig, int SettoreInizioCol, int num,int n) { for (int rig = 0; rig < (int)sqrt(n); rig++) for (int col = 0; col < (int)sqrt(n); col++) if (items[rig+SettoreInizioRig][col+SettoreInizioCol] == num) return true; return false; } //Mi dice la casella sicura dove posso inserire il numero bool Sudoku::NumCerto(vettore items, int rig, int col, int num,int n) { //se tutti e tre sono falsi cioè non sta in riga non sta in colonna non sta nel box allora il numero è sicuro return !UsedInRig(items, rig, num,n) && !UsedInCol(items, col, num,n) && !UsedInBox(items, rig - rig % (int)sqrt(n) , col - col % (int)sqrt(n), num,n); } // Stampa della griglia void vector2d::StampaGriglia(vettore items,int n,int &cont) { ofstream fout;//Dichiarazione variabile che mi permette di scrivere su file fout.open("cicli sudoku.txt", ios::app);//apro un file in modalità append per "appendere" più output if(cont%5000==0)//questo if serve per stampare ogni 5000 cicli la soluzione parziale del sudoku fout<<"\n\n Soluzione parziale sudoku al ciclo "<<cont<<":\n\n"; for (int rig = 0; rig < n; rig++) { for (int col = 0; col < n; col++){ cout<<setw(3)<<items[rig][col]<<" ";//stampo in output la matrice fout<<setw(3)<<items[rig][col]<<" ";}//stampo su file la matrice cout<<endl; fout<<endl; } fout<<"\n------------------------------------------------------------------------------------------\n"; fout.close(); } void vector2d::Crea_griglia(vettore &items ,int &n) // Si devono passare entrambe le variabili per riferimento { string nomefile; cout<<"Inserire il nome del file: "; cin>>nomefile; int temp; nomefile+=".txt";//concateno il nome del file con la sua estensione ifstream fin(nomefile.c_str());//Sto operando sul file chiamato "nomefile" if( ! fin.is_open() ) // controllo che il file sia aperto return; fin>>n;//acquisisco dal fine la dimensione della griglia for ( int i = 0; i < n; i++ ) { items.push_back ( vector<int>() ); for ( int j = 0; j < n; j++ ) fin>>temp; items[i].push_back ( temp ); } fin.close(); }

Rispondi quotando