Hey meine lieben Freunde!
(kurzer Hinweis: ist für die Schule, will aber keinen vorgekauten Code, glaub ich steh grad bei der 90%-Marke auf der Leitung, hoffe desshalb auf das magische Paar zweite Augen)
Aufgabe ist, ein Sudoku-Feld(9x9) mit Hilfe des Backtracking-Algorithmus(rekursiv) zu lösen.
Derzeit zweifle ich jedoch ein wenig an daran, dass meine Überprüfung vollkommen funktioniert.
Bei Unklarheiten beanworte ich gerne alles oder liefere weiteren Code. (erscheint mir nur schon ein wenig viel zum mal schnell drüberfliegen)
Bin für jede Anregung sehr Dankbar!
-Thomas
(kurzer Hinweis: ist für die Schule, will aber keinen vorgekauten Code, glaub ich steh grad bei der 90%-Marke auf der Leitung, hoffe desshalb auf das magische Paar zweite Augen)
Aufgabe ist, ein Sudoku-Feld(9x9) mit Hilfe des Backtracking-Algorithmus(rekursiv) zu lösen.
Derzeit zweifle ich jedoch ein wenig an daran, dass meine Überprüfung vollkommen funktioniert.
Java:
//Überprüfung der 9 3x3-Blöcke
//SudoCell ist nur ein Container zum leichteren Herrumreichen einer Zellenkoordinate.
private boolean checkBlock(SudoCell cell)
{
int row=cell.getRow();
int column=cell.getColumn();
if(row<3){
if(column<3){
return blockContains(field.collectBlockCells(0, 0), cell);
}
else if(column>5){
return blockContains(field.collectBlockCells(0, 6), cell);
}
else{
return blockContains(field.collectBlockCells(0, 3), cell);
}
}
//für die mittlere und die untere Blockreihe siehts ident aus, nur mit den Parameter
//(3,x) bzw. (6,x).
}
public ArrayList<SudoCell> collectBlockCells(int startRow, int startColumn)
{
ArrayList<SudoCell> temp = new ArrayList<SudoCell>();
for(int i=0; i<3; i++)
{
for(int n=0; n<3; n++)
{
temp.add(getCell(i+startRow,n+startColumn));
}
}
//printCellList(temp);
return temp;
}
private boolean blockContains(ArrayList<SudoCell> cells, SudoCell cell)
{
for(SudoCell c:cells)
{
if(cell.getValue()==c.getValue())
{
if(cell.getId()!=c.getId())
{
return false;
}
}
}
return true;
}
private boolean checkLines(SudoCell cell)
{
int row=cell.getRow();
int column=cell.getColumn();
SudoCell temp;
for(int i=0; i<9; i++)
{
temp=field.getCell(i, column);
if(temp.getValue()==cell.getValue())
{
if(temp.getId()!=cell.getId())
{
return false;
}
}
temp=field.getCell(row, i);
if(temp.getValue()==cell.getValue())
{
if(temp.getId()!=cell.getId())
{
return false;
}
}
}
return true;
}
Bei Unklarheiten beanworte ich gerne alles oder liefere weiteren Code. (erscheint mir nur schon ein wenig viel zum mal schnell drüberfliegen)
Bin für jede Anregung sehr Dankbar!
-Thomas