void kontrola_radku(int sudoku[9][9], int radek, int hledaneCislo){
for(radek; radek < 9; radek++){
int pozice=0; // vynuluju pocet nul na radku
for(int osaY = 0; osaY < 9; osaY++){
//kontrola jestli je na radku mene nez 3 nuly
if(sudoku[osaY][radek] == 0){
pozice++;
}
}//konec osaY
//pokud je na radku mene nez 3 nuly(volne mista) zkusim doplnit hledane cislo
if(pozice <= 3){
while(hledaneCislo <= 9){
//pokud se cislo na radku rovna 0 rozjedu kontrolu celeho radku
for(int kontrolovaneCislo = 0; kontrolovaneCislo < 9; kontrolovaneCislo++){
if(sudoku[kontrolovaneCislo][radek] == 0){
for(int kontrolaRadku = 0; kontrolaRadku < 9; kontrolaRadku++){
if(sudoku[kontrolaRadku][radek] == hledaneCislo){
hledaneCislo++;
if(hledaneCislo > 9){kontrola_radku(sudoku, radek, 1);}
kontrola_radku(sudoku, radek, hledaneCislo);
}
}//konec kontrola
// zkontroluju sloupce a kostky moznych pozic
bool sloupec=0;
bool kostka=0;
for(int kontrolaY = 0; kontrolaY < 9; kontrolaY++){
if(sudoku[kontrolovaneCislo][kontrolaY] == hledaneCislo){
sloupec = 1;
break;
}
}
if(kontrolovaneCislo <= 3 && radek <= 3){
for(int y = 0; y < 3; y++){
for(int x = 0; x < 3; x++){
if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
}
}
}
if(kontrolovaneCislo > 3 && kontrolovaneCislo <= 6 && radek <= 3){
for(int y = 0; y < 3; y++){
for(int x = 3; x < 6; x++){
if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
}
}
}
if(kontrolovaneCislo > 6 && kontrolovaneCislo < 9 && radek <= 3 ){
for(int y = 0; y < 3; y++){
for(int x = 6; x < 9; x++){
if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
}
}
}
if(kontrolovaneCislo <= 3 && radek > 3 && radek <= 6){
for(int y = 3; y < 6; y++){
for(int x = 0; x < 3; x++){
if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
}
}
}
if(kontrolovaneCislo > 3 && kontrolovaneCislo <= 6 && radek > 3 && radek <= 6){
for(int y = 3; y < 6; y++){
for(int x = 3; x < 6; x++){
if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
}
}
}
if(kontrolovaneCislo > 6 && kontrolovaneCislo < 9 && radek > 3 && radek <= 6){
for(int y = 3; y < 6; y++){
for(int x = 6; x < 9; x++){
if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
}
}
}
if(kontrolovaneCislo <=3 && radek > 6 && radek < 9){
for(int y = 6; y < 9; y++){
for(int x = 0; x < 3; x++){
if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
}
}
}
if(kontrolovaneCislo > 3 && kontrolovaneCislo <= 6 && radek > 6 && radek < 9){
for(int y = 6; y < 9; y++){
for(int x = 3; x < 6; x++){
if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
}
}
}
if(kontrolovaneCislo > 6 && kontrolovaneCislo < 9 && radek > 6 && radek < 9){
for(int y = 6; y < 9; y++){
for(int x = 6; x < 9; x++){
if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
}
}
}
// pokud cislo neni obsazeno ani ve sloupci ani kostce prislusne volne pozice oznacim jako podezrele
if (kostka == 0 && sloupec == 0){sudoku[kontrolovaneCislo][radek] = -1;}
}
}//konec kontrolovaneCislo
dosad_cislo(sudoku, hledaneCislo);
vynuluj_pole(sudoku);
hledaneCislo++;
}//konec while
hledaneCislo=1;
}
}//konec radek
cout << "KONEC PROCD" << endl;
}
Zdravím,
na začátek bych chtěl upozornit, že s C++ začínám, takže pokud je v této funkci moc prasáckých chyb - učím se a potřebuji vědět jak psát zprávně.
Tato procedura je součástí "prográmku", který má luštit hru sudoku (do programu jsem se snažil přepsat svůj myšlenkový pochod). Problém je však ten že se co celé skládá ze tří procedur (jedan kontroluje kostky 3x3 druhá sloupce a třetí řádky).
Tato procedurka mi dělá tu chybu, že kdzž se dostane na poslední řádek a doplní na něm číslo, tak se neukončí ale zasekne na tom poslením řádku. Pro kontrolu jsem si napsal ten řádek který mi vzpisuje "KONEC PROCD" a na něj se normálně dostane, ale potom se nesmyslně znovu vrátí....
Už si s tím hraju dva dny a neůžu na to přijít, kdyby to někdo prokousnul moc by mi to pomohlo....
Díkec Víťas