Witam, przychodzę z problemem takim jak w temacie. Program po kompilacji i uruchomieniu nie pokazuje rozwiązania, tylko nierozwiązane sudoku.
main.cpp
#include <iostream>
#include "funkcje.h"
using namespace std;
int tab[9][9]
{
{3, 0, 6, 5, 0, 8, 4, 0, 0},
{5, 2, 0, 0, 0, 0, 0, 0, 0},
{0, 8, 7, 0, 0, 0, 0, 3, 1},
{0, 0, 3, 0, 1, 0, 0, 8, 0},
{9, 0, 0, 8, 6, 3, 0, 0, 5},
{0, 5, 0, 0, 9, 0, 6, 0, 0},
{1, 3, 0, 0, 0, 0, 2, 5, 0},
{0, 0, 0, 0, 0, 0, 0, 7, 4},
{0, 0, 5, 2, 0, 6, 3, 0, 0}
};
bool sudoku() // wyszukuje puste miejsca i wstawia odpowiednia liczbe
{
int wiersz=0, kolumna=0;
if (!puste_miejsce(wiersz, kolumna))
return true;
for (int liczba = 1; liczba <= 9; liczba++)
{
if (miejsce(wiersz, kolumna, liczba))
{
tab[wiersz][kolumna] = liczba;
if (sudoku())
{
return true;
}
else
tab[wiersz][kolumna] = 0;
}
}
return false;
}
void wstawsudoku() // tworzymy sudoku
{
for (int wiersz = 0; wiersz < 9; wiersz++)
{
for (int kolumna = 0; kolumna < 9; kolumna++)
{
if (kolumna == 3 || kolumna == 6)
cout << " | ";
cout << tab[wiersz][kolumna] << " ";
}
if (wiersz == 2 || wiersz == 5)
{
cout<< endl;
for (int i = 0; i < 9; i++)
cout << "---";
}
cout<< endl;
}
}
int main()
{
if (sudoku() == true)
wstawsudoku();
}
funkcje.cpp
#include "funkcje.h"
bool szukanie_w_kolumnie(const int& kolumna, const int& liczba) // sprawdzamy czy w kolumnie już liczba czy nie
{
for (int wiersz = 0; wiersz < 9; wiersz++)
{
if (tab[wiersz][kolumna] == liczba)
return true;
else
return false;
}
}
bool szukanie_w_wierszu( const int& wiersz, const int& liczba)//sprawdzamy czy w wierszu już liczba czy nie
{
for (int kolumna = 0; kolumna < 9; kolumna++)
{
if (tab[wiersz][kolumna] == liczba)
return true;
else
return false;
}
}
bool szukanie_w_kwadracie(const int& kwadrat_kolumna, const int& kwadrat_wiersz, const int& liczba) // sprawdzamy czy w kwadracie 3x3 jest juz liczba czy nie
{
for (int kolumna = 0; kolumna < 3; kolumna++)
{
for (int wiersz = 0; wiersz < 3; wiersz++)
{
if (tab[wiersz + kwadrat_wiersz][kolumna + kwadrat_kolumna] == liczba)
return true;
else
return false;
}
}
}
bool puste_miejsce(const int& kolumna, const int& wiersz) //szukamy pustego miejsca w sudoku
{
for (int wiersz = 0; wiersz < 9; wiersz++)
{
for (int kolumna = 0; kolumna < 9; kolumna++)
{
if (tab[wiersz][kolumna] == 0)
return true;
else
return false;
}
}
}
bool miejsce(const int& wiersz, const int& kolumna, const int& liczba) // sprawdza czy mozna wstawic liczbe do danego miejsca
{
return !szukanie_w_wierszu(wiersz, liczba) && !szukanie_w_kolumnie(kolumna, liczba) && !szukanie_w_kwadracie(wiersz - wiersz % 3, kolumna - kolumna % 3, liczba);
}
funkcje.h
#pragma once
#ifndef FUNKCJEH
#define FUNKCJEH
extern int tab[9][9];
bool szukanie_w_kolumnie(const int& kolumna, const int& liczba);
bool szukanie_w_wierszu(const int& wiersz, const int& liczba);
bool szukanie_w_kwadracie(const int& kwadrat_kolumna, const int& kwadrat_wiersz, const int& liczba);
bool puste_miejsce(const int& kolumna, const int& wiersz);
bool miejsce( const int& wiersz, const int& kolumna, const int& liczba);
#endif