Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- int rozmiar = 9;
- int dane[9][9];
- void drukuj() {
- for (int y=0; y<rozmiar; y++) {
- for (int x=0; x<rozmiar; x++) {
- if (dane[y][x] != 0) {
- cout << dane[y][x] << " ";
- } else {
- cout << "_ ";
- }
- }
- cout << endl;
- }
- cout << endl;
- }
- bool weryfikujDane() {
- for (int x=0; x<rozmiar; x++) {
- for (int y=0; y<rozmiar; y++) {
- if (dane[y][x] != 0) {
- // sprawdz czy w wierszu / kolumnie istnieje juz taka wartosc
- int a = 0;
- for (int i=0; i<rozmiar; i++) {
- // sprawdz wiersz - spodziewamy sie tylko jednej identycznej wartosci
- if (dane[y][x] == dane[y][i]) a++;
- // sprawdz kolumne - spodziewamy sie tylko jednej identycznej wartosci
- if (dane[y][x] == dane[i][x]) a++;
- }
- if (a > 2) return false;
- // określenie w której sekcji jesteśmy
- int sX = x/3;
- int sY = y/3;
- a = 0;
- // sprawdz czy w danej sekcji istnieje podobna liczba
- for (int i=sY*3; i<sY*3+3; i++) {
- for (int j=sX*3; j<sX*3+3; j++) {
- if (dane[y][x] == dane[i][j]) a++;
- }
- }
- if (a > 1) return false;
- }
- }
- }
- return true;
- }
- int main() {
- fstream plik;
- plik.open("bledne_dane.txt");
- for (int i=0; i<rozmiar; i++) {
- for (int j=0; j<rozmiar; j++) {
- plik >> dane[i][j];
- }
- }
- plik.close();
- drukuj();
- if (weryfikujDane()) {
- cout << "DANE OK" << endl;
- } else {
- cout << "DANE NOK" << endl;
- }
- // wybierz komórkę (która ma wartość równą 0)
- //int x = 0, y = 0;
- string komenda;
- int liczbaPustychMiejsc;
- int liczbaUzupelnionychMiejsc;
- do {
- liczbaPustychMiejsc = 0;
- liczbaUzupelnionychMiejsc = 0;
- for (int x=0; x<rozmiar; x++) {
- for (int y=0; y<rozmiar; y++) {
- if (dane[y][x] == 0) {
- // ustaw liczby od 1 .. 9 jako możliwe
- bool dostepneLiczby[rozmiar+1];
- for (int i=0; i<rozmiar+1; i++) {
- dostepneLiczby[i] = true;
- }
- // wykreślamy wszystkie liczby które istnieją w tym samym wierszu
- // lub kolumnie
- for (int i=0; i<rozmiar; i++) {
- dostepneLiczby[dane[y][i]] = false;
- dostepneLiczby[dane[i][x]] = false;
- }
- // określenie w której sekcji jesteśmy
- int sX = x/3;
- int sY = y/3;
- // wykreślamy wszystkie liczby które istnieją w tej samej sekcji
- for (int i=sY*3; i<sY*3+3; i++) {
- for (int j=sX*3; j<sX*3+3; j++) {
- dostepneLiczby[dane[i][j]] = false;
- }
- }
- // sprawdz liczbe mozliwych kombinacji
- int liczbaKombinacji = 0;
- int mozliwaWartosc = 0;
- for (int i=0; i<rozmiar+1; i++) {
- if (dostepneLiczby[i]) {
- liczbaKombinacji++;
- mozliwaWartosc = i;
- }
- }
- // zaktualizuj dane jeśli liczba kombinacji = 1
- if (liczbaKombinacji == 1) {
- dane[y][x] = mozliwaWartosc;
- liczbaUzupelnionychMiejsc++;
- } else {
- liczbaPustychMiejsc++;
- }
- }
- }
- }
- drukuj();
- //cout << "Czy powtórzyć zgadywanie? (t/n)";
- //cin >> komenda;
- } while (liczbaPustychMiejsc > 0 && liczbaUzupelnionychMiejsc > 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement