Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<algorithm>
- #include<vector>
- using namespace std;
- #define for9(x) for(x=0; x<9; x++)
- vector<short> temp;
- vector<vector<short> > wartosc(8, vector<short>(8));
- vector<vector<vector<short> > > czy(8,vector<vector<short> >(8, vector<short>(0))); //wektor tych wartości, których pole nie może przyjąć
- void tempset()
- {
- short i;
- for9(i){
- temp[i]=i+1;
- }
- }
- void czysctemp()
- {
- remove(temp.begin(), temp.end(), 0);
- }
- void usunztemp(short i)
- {
- vector<short>::iterator it;
- it = find(temp.begin(), temp.end(), i);
- *it = 0;
- }
- bool czy0 = false;
- void jesli0(short i)
- {
- if(i==0) czy0 = true;
- }
- bool czycale()
- {
- int i, j;
- vector<short>::iterator it;
- for9(i){
- for_each(wartosc[i].begin(), wartosc[i].end(), jesli0);
- if(czy0==true) return false;
- }
- return true;
- }
- short kwadrat(short x)
- {
- if(x==0 || x==3 || x==6) return x;
- if(x==1 || x==2) return 0;
- if(x==4 || x==5) return 3;
- if(x==7 || x==8) return 6;
- }
- void ustaw(int i, int j)
- {
- short k, l;
- for9(k){
- if(wartosc[i][k]==0)
- if(count(czy[i][k].begin(), czy[i][k].end(), wartosc[i][j]) == 0)//sprawdz czy wartość nie została już zadeklarowana jako nie mogąca wystąpić
- czy[i][k].push_back(wartosc[i][j]); // zapisuj co nie możebyć w poziomo
- }
- for9(k){
- if(wartosc[k][j]==0)
- if(count(czy[i][k].begin(), czy[i][k].end(), wartosc[i][j]) == 0) //sprawdz czy wartość nie została zadeklarowana jako nie mogąca wystąpić
- czy[k][j].push_back(wartosc[i][j]); // zapisuj co nie możebyć w pionowo
- }
- for(k=kwadrat(i); k<kwadrat(i)+3; k++){
- for(l=kwadrat(j); l<kwadrat(j)+3; l++){
- if(wartosc[k][l]==0)
- if(count(czy[i][k].begin(), czy[i][k].end(), wartosc[i][j]) == 0)//sprawdz czy wartość nie została zadeklarowana jako nie mogąca wystąpić
- czy[k][l].push_back(wartosc[i][j]); // zapisuj co nie może być w kwadracie
- }
- }
- }
- int main()
- {
- short i,j;
- cout << "Podaj wartości pól sudoku\n";
- for9(i){
- for9(j){
- cin >> wartosc[i][j];
- cout << "OK";
- if(wartosc[i][j]!=0) ustaw(i,j);
- }
- }
- cout << "Zakończono wczytywanie\n";
- while(!czycale()){
- for9(i){
- for9(j){
- if(wartosc[i][j]!=0){
- if(czy[i][j].size()==7){
- for_each(czy[i][j].begin(), czy[i][j].end(), usunztemp);
- czysctemp();
- wartosc[i][j]=temp[0];
- tempset();
- }
- if(wartosc[i][j]!=0) ustaw(i,j);
- }
- }
- }
- for9(i){
- for9(j){
- cout << wartosc[i][j] << ' ';
- }
- cout << '\n';
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement