我被賦予了撰寫數獨程式的任務,該程式解決了數獨維基百科示例。解決數獨難題的方法必須是遞回方法。它首先檢查數獨板是否有效(數獨規則:在同一行、列和框中沒有出現兩次的數字),然后獲取它可以寫入的第一個空欄位并在欄位中寫入第一個值(數字 1)。之后,該方法再次呼叫自身(遞回)。
我的方法如下所示:
private bool SolveSudoku(int[,] board)
{
// if board not valid, return false
if (!CheckBoardValid(board))
{
return false;
}
// if board full, return true
var nextField = GetFirstEmpty(board);
if (nextField is null)
{
return true;
}
for (int value = 1; value < 10; value )
{
board[nextField.Value.X, nextField.Value.Y] = value;
var solved = SolveSudoku(board);
// if solved, do nothing
// if not solved, undo this step and try writing next number (value ) in field
}
return false;
}
如果最后一步無效,我該如何撤消?
uj5u.com熱心網友回復:
剪掉相關部分:
for (int value = 1; value < 10; value )
{
board[nextField.Value.X, nextField.Value.Y] = value;
if(SolveSudoku(board)) return true;
// ^^ Stop if solved,
// iteration will increase value if not.
}
// reset and return false if no value for this field leads to a solution.
board[nextField.Value.X, nextField.Value.Y] = 0;
return false;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/478708.html
