Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- int tab[21][9];
- ofstream plik;
- void wstawianie(int x, int y);
- bool sprawdzenie(int x, int y, int wstawiana);
- bool sprawdzenie_pion_i_poziom(int x, int y, int wstawiana); //juz dziala
- bool czysajeszczepuste();
- void wyswietl();
- void zwiekszenie(int x, int y);
- bool sudoku(int pierw, int druga);
- bool czy_puste(int x, int y, int k)
- {
- tab[x][y]=0;
- if(tab[x][y]==0)
- {
- tab[x][y]=k;
- return true;
- }
- else{
- tab[x][y]=k;
- return false;
- }
- }
- bool trzy_na_trzy( int x, int y, int wstawiana) //dziala
- {
- ////////////////////////////////////////////////////////////////////////////////glupie ify
- int opcja=0;
- tab[x][y]=0;
- bool zmienna;
- zmienna=false;
- if((x>=0 && x<=2) && (y>=0 && y<=2)){
- opcja=1;
- }
- else if((x>=3 && x<=5) && (y>=0 && y<=2)){
- opcja=4;
- }
- else if((x>=6 && x<=8) && (y>=0 && y<=2)){
- opcja=7;
- }
- else if((x>=0 && x<=2) && (y>=3 && y<=5)){
- opcja=2;
- }
- else if((x>=3 && x<=5) && (y>=3 && y<=5)){
- opcja=5;
- }
- else if((x>=6 && x<=8) && (y>=3 && y<=5)){
- opcja=8;
- }
- else if((x>=0 && x<=2) && (y>=6 && y<=8)){
- opcja=3;
- }
- else if((x>=3 && x<=5) && (y>=6 && y<=8)){
- opcja=6;
- }
- else if((x>=6 && x<=8) && (y>=6 && y<=8)){
- opcja=9;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////
- {
- switch(opcja)
- {
- case 1:
- sprawdzenie(0,0, wstawiana);
- break;
- case 2:
- zmienna=sprawdzenie(0,3, wstawiana);
- break;
- case 3:
- sprawdzenie(0,6, wstawiana);
- break;
- case 4:
- sprawdzenie(3,0, wstawiana);
- break;
- case 5:
- sprawdzenie(3,3, wstawiana);
- break;
- case 6:
- sprawdzenie(3,6, wstawiana);
- break;
- case 7:
- sprawdzenie(6,0, wstawiana);
- break;
- case 8:
- sprawdzenie(6,3, wstawiana);
- break;
- case 9:
- sprawdzenie(6,6, wstawiana);
- break;
- }
- }
- }
- int main()
- {
- int zlicz=0, zlicz2=0, wiersz=0, kolumn=0;
- ifstream plik_dane;
- bool pomoc;
- plik_dane.open("dane1.txt");
- if(plik_dane.good()==false)
- {
- cout<<"nie udalo sie otworzyc"<<endl;
- }
- for(int i=0; i<21; i++)
- {
- for(int j=0; j<9; j++)
- {
- plik_dane>>tab[i][j];
- }
- }
- plik.open("wynik.txt");
- //////////////////////////////////////////////////////////////////////////////////////////////////////////// wywolanie wszystkich funkcji
- sudoku(0,0);
- wyswietl();
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- cout<<zlicz<<endl;
- cout<<zlicz2<<endl;
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////
- bool sprawdzenie(int x, int y, int wstawiana)
- {
- bool wynik_porownania=true;
- for(int i=x; i<x+3; i++)
- for(int j=y; j<y+3; j++) //sprawdzenie trujek
- {
- if(tab[i][j]==wstawiana){
- wynik_porownania=false;
- }
- }
- tab[x][y]=wstawiana;
- return wynik_porownania;
- }
- bool sprawdzenie_pion_i_poziom(int x, int y, int wstawiana)
- {
- tab[x][y]=0;
- bool zmienna=true, zmienna2=true;
- for(int j=0; j<9; j++){
- if(tab[x][j]==wstawiana)
- {
- //to chodzi poziom
- zmienna=false;
- }
- }
- for(int i=0; i<9; i++)
- {
- if(tab[i][y]==wstawiana) //to chodzi pion
- {
- zmienna2=false;
- }
- }
- tab[x][y]=wstawiana;
- return zmienna && zmienna2;
- }
- bool czysajeszczepuste()
- {
- for(int i=0; i<9; i++)
- {
- for(int j=0; j<9; j++)
- {
- if(tab[i][j]==0)
- {
- return true;
- }
- }
- }
- return false;
- }
- bool sudoku(int pierw, int druga)
- {
- int pomoc1=0, pomoc2=0;
- cout<<pierw<<druga<<endl;
- if(czysajeszczepuste()==false)
- {
- return true;
- wyswietl();
- }
- for(int i=1; i<10; i++)
- {
- tab[pierw][druga]=i;
- pomoc1=pierw;
- pomoc2=druga;
- if(trzy_na_trzy(pierw,druga,i) && sprawdzenie_pion_i_poziom(pierw,druga,i) ==true)
- {
- if(druga==8)
- {
- pierw=pierw+1;
- druga=0;
- }
- else if(druga<8)
- {
- druga=druga+1;
- }
- if(sudoku(pierw,druga)==true)
- {
- // cout<<"cypis"<<endl;
- return true;
- }
- }
- }
- tab[pomoc1][pomoc2]=0;
- return false;
- }
- void wyswietl()
- {
- for(int i=0; i<9; i++)
- {
- for(int j=0; j<9; j++)
- {
- cout<<tab[i][j]<<" ";
- plik<<tab[i][j]<<" ";
- }
- plik<<endl;
- cout<<endl;
- }
- plik<<"\n"<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement