2017-03-31 7 views
-1

Ich bin ziemlich neu in C++, tut mir leid, wenn das eine einfache Frage ist!Problem beim Zurückgeben eines Vektorarrays C++

Ich mache gerade einen Sudoku-Löser. Jede Zelle hat eine Kandidatenliste, die eine Menge von Werten ist, die es möglicherweise sein könnte. Der Kandidat verringert sich, indem er Werte löscht, die sich in derselben Zeile, Spalte und demselben Block befinden, bis schließlich nur ein einzelner Wert in der Kandidatenliste vorhanden ist. Dies ist der neue gelöste Wert der Zelle.

Ich habe diesen Teil arbeiten, aber eine andere Möglichkeit, die Zelle kann durch 'versteckte Werte' gelöst werden. Versteckte Werte werden gefunden, indem die Kandidatenliste der Zelle mit den Kandidatenlisten aus der Zeile, Spalte oder dem Block der Zelle verglichen wird. Wenn die aktuelle Zelle einen Wert in ihrer Kandidatenliste hat, der in keinem der anderen gefunden werden kann, muss dies der gelöste Wert der Zelle sein.

Worauf ich Probleme habe, ist die Kandidatenliste der Zelle zurückzugeben, damit ich sie mit anderen zurückgeben kann.

Ich habe eine Zellklasse und eine Zellgruppenklasse. Die Zellengruppe ist im Grunde eine Zeile, eine Spalte oder ein Block. Jede Gruppe enthält 9 Zellen.

In der Zellgruppe Klasse Ich habe die folgende Methode:

int CellGroup::checkHiddenSinglesRow(Cell * cell) const 
{ 
int candidateList[] = { cell->getCandidateList() }; //not returning correctly 

int hiddenSingle = 0; 
for (int i = 0; i < 9; ++i) 
{ 
    Cell *cells = m_cells[i]; 
    bool found = cells->SearchCandidateList(value); 
    if (found == true) { 

     hiddenSingle = hiddenSingle + 1; 
    } 
} 
return hiddenSingle; 

}

Die Methode suchen Kandidaten im Grunde eine Zelle Kandidatenliste durchläuft und gibt true zurück, wenn sie den Wert gefunden haben, in der Zelle Klasse:

bool Cell::SearchCandidateList(int value) { 
bool found; 
auto it = find(m_candidateList.begin(), m_candidateList.end(), value); 
if (it != m_candidateList.end()) { 
    found = true; 
} 
else { 
    found = false; 
} 
return found; 

}

Und das ist die Methode, die ich verwenden, um die aktuelle Zellen Kandidatenliste zurückzukehren, in die Zellklasse:

int Cell::getCandidateList(void) const 
{ 
for (auto i = m_candidateList.begin(); i != m_candidateList.end(); ++i) { 
    int j; 
    j = *i; 
    return j; 
} 


} 

Die getCandidateList 1 zurückkehren, die der erste Wert in der Kandidatenliste sein kann. Es kann nützlich sein, die Liste als ein Array zurückzugeben, damit ich die Werte darin vergleichen kann, aber ich bin unsicher, wie man das implementiert.

Jede Hilfe würde massiv geschätzt werden!

Dank Lucy

+3

Warum Sie nicht zurück, die * aktuellen * Vektor statt? –

Antwort

0

Sie können wie die Vektor zurück:

std::vector<int> Cell::getCandidateList() const 
{ 
    return m_candidateList; 
} 
+0

Danke! darauf jetzt – lCopp

Verwandte Themen