Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- class Plansza
- {
- int rozmiar;
- bool** plansza;
- int ilosc;
- public:
- Plansza(int r);
- ~Plansza();
- void umiesc(int x, int y);
- int ile();
- int sasiedzi(int x, int y);
- void usun();
- void usun2();
- };
- struct wspolrzedne
- {
- int x;
- int y;
- };
- Plansza::Plansza(int r) : rozmiar(r), ilosc(0)
- {
- plansza = new bool*[r];
- for(int i = 0; i < r; ++i)
- plansza[i] = new bool[r];
- for(int i = 0; i < r; ++i)
- for(int j = 0; j < r; ++j)
- plansza[i][j] = false;
- }
- Plansza::~Plansza()
- {
- for(int i = 0; i < rozmiar; ++i)
- delete[] plansza[i];
- delete[] plansza;
- }
- void Plansza::umiesc(int x, int y)
- {
- plansza[x][y] = true;
- ++ilosc;
- }
- int Plansza::ile()
- {
- return ilosc;
- }
- int Plansza::sasiedzi(int x, int y)
- {
- int licznik = 0;
- if(x != 0 && y != 0) // lewy górny
- if(plansza[x-1][y-1])
- ++licznik;
- if(x != 0) // lewy
- if(plansza[x-1][y])
- ++licznik;
- if(x != 0 && y < (rozmiar - 1)) // lewy dolny
- if(plansza[x-1][y+1])
- ++licznik;
- if(y < (rozmiar - 1)) // dolny
- if(plansza[x][y+1])
- ++licznik;
- if(x < (rozmiar - 1) && y < (rozmiar - 1)) // prawy dolny
- if(plansza[x+1][y+1])
- ++licznik;
- if(x < (rozmiar-1)) // prawy
- if(plansza[x+1][y])
- ++licznik;
- if(x < (rozmiar-1) && y > 0) // prawy gorny
- if(plansza[x+1][y-1])
- ++licznik;
- if(y > 0) // gorny
- if(plansza[x][y-1])
- ++licznik;
- return licznik;
- }
- void Plansza::usun()
- {
- // usuwa pionki z tych wszystkich pol, ktore maja mniej niz dwoch sasiadow
- int** tablica = new int*[rozmiar];
- for(int i = 0; i < rozmiar; ++i)
- tablica[i] = new int[rozmiar];
- for(int i = 0; i < rozmiar; ++i)
- for(int j = 0; j < rozmiar; ++j)
- tablica[i][j] = sasiedzi(i, j);
- for(int i = 0; i < rozmiar; ++i)
- for(int j = 0; j < rozmiar; ++j)
- if(tablica[i][j] < 2 && plansza[i][j])
- {
- plansza[i][j] = false;
- --ilosc;
- }
- for(int i = 0; i < rozmiar; ++i)
- delete[] tablica[i];
- delete[] tablica;
- }
- void Plansza::usun2()
- {
- // usuwa pionki z tych wszystkich pol, ktore maja mniej niz dwoch sasiadow
- wspolrzedne wsp;
- vector<wspolrzedne> do_usuniecia;
- do_usuniecia.clear();
- for(int i = 0; i < rozmiar; ++i)
- for(int j = 0; j < rozmiar; ++j)
- if(sasiedzi(i, j) < 2 && plansza[i][j])
- {
- wsp.x = i;
- wsp.y = j;
- do_usuniecia.push_back(wsp);
- }
- int x, y;
- for(unsigned i = 0; i < do_usuniecia.size(); ++i)
- {
- x = do_usuniecia[i].x;
- y = do_usuniecia[i].y;
- plansza[x][y] = false;
- --ilosc;
- }
- }
- int main()
- {
- Plansza nowa(4);
- nowa.umiesc(2, 1);
- nowa.umiesc(2, 2);
- nowa.umiesc(2, 3);
- cout << nowa.ile() << endl;
- nowa.usun2();
- cout << nowa.ile() << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement