/ / Sprawdzanie, czy liczba istnieje w tym samym wierszu lub kolumnie - algorytm c ++

Sprawdzanie, czy liczba istnieje w tym samym wierszu lub kolumnie - c ++, algorytm

Wpatrywałem się w ten kod od kilku godzin, próbowałem solucji, debugowania z autami i punktami przerwania i jak dotąd nie ma na to żadnego rozwiązania. Pomoże mi świeży wygląd Maybie;).

#include <iostream>

using namespace std;

int matrix[9][9] = {{0, 0, 6, 0, 0, 0, 1, 0, 5},
{0, 4, 0, 7, 0, 6, 0, 3, 9},
{2, 0, 0, 9, 3, 0, 6, 0, 0},
{7, 0, 0, 1, 8, 0, 5, 0, 4},
{0, 0, 4, 0, 6, 0, 9, 0, 0},
{1, 0, 9, 0, 5, 2, 0, 0, 3},
{0, 0, 1, 0, 9, 3, 0, 0, 7},
{6, 7, 0, 5, 0, 8, 0, 9, 0},
{9, 0, 8, 0, 0, 0, 4, 0, 0}};


bool check(int column  ,int row,int checkedValue)
{
//column check
for(int i=0; i<9; i++)
{
if(i==row)continue;

if(checkedValue==matrix[column][i]) return false;
}
//row check
for(int i=0; i<9; i++)
{
if(i==column) continue;
if(checkedValue==matrix[i][row]) return false;
}
return true;
}



int main()
{
cout<<check(4,0,4); //Why does it output 0? There is no "4" in the 5th column and the 1st row.

system("pause");
return 0;
}

Kontrola funkcji (kolumna, wiersz, wartość) została zaprojektowana tak, aby zwracała 0, gdy liczba występuje co najmniej raz w dwuwymiarowej tabeli „macierz”. Ten program jest kawałkiem solvera sudoku.

Odpowiedzi:

3 dla odpowiedzi № 1

Zmieszałeś wskaźniki w if sprawozdania. Powinni być:

if(checkedValue==matrix[i][column]) return false; // not matrix[column][i]

i

if(checkedValue==matrix[row][i]) return false;    // not matrix[i][row]

Powodem jest to, że pierwszym wymiarem jest rząd. Możesz to sprawdzić, drukując matrix[2][0].
Za matrycę otrzymasz 2 (a nie 6).