私はYouTubeでこの講義を見ました:http ://www.youtube.com/watch?v = p-gpaIGRCQI そして私が書いたコードがあります:
int _Solve(int iRow, int iCol)
{
if (iRow == 9) return 1;
if (arrBoard[iRow][iCol])
{
iRow = (iCol == 8) ? iRow + 1 : iRow;
iCol = (iCol == 8) ? 0 : iCol + 1;
if(_Solve(iRow, iCol)) return 1;
return 0;
}
int iNewNum, iOldRow, iOldCol;
for (iNewNum = 1; iNewNum <= SIZE; iNewNum++)
{
if (IsValid(iNewNum, iRow, iCol))
{
arrBoard[iRow][iCol] = iNewNum;
iOldRow = iRow; iOldCol = iCol;
iRow = (iCol == 8) ? iRow + 1 : iRow;
iCol = (iCol == 8) ? 0 : iCol + 1;
if (_Solve(iRow, iCol)) return 1;
iRow = iOldRow; iCol = iOldCol;
arrBoard[iRow][iCol] = 0;
}
}
return 0;
}
しかし、それは機能しません。arrBoardを印刷した後、空のセルごとに取得した値はゼロを表示します。これは、パズルをarrBoardに入れて表示する関数です(arrBoardはWM_CREATEメッセージでゼロで初期化されます)。
void LabelsToBoard(void)
{
int iRow, iCol;
TCHAR szTemp[2];
for (iRow = 0; iRow < SIZE; iRow++)
for (iCol = 0; iCol < SIZE; iCol++)
{
GetWindowText(hwndLabels[iRow][iCol], szTemp, 2);
if (szTemp[0] != ' ')
arrBoard[iRow][iCol] = szTemp[0] - '0';
}
}
void BoardToLabels(void)
{
int iRow, iCol;
TCHAR szTemp[2];
szTemp[1] = '\0';
for (iRow = 0; iRow < SIZE; iRow++)
for (iCol = 0; iCol < SIZE; iCol++)
{
szTemp[0] = arrBoard[iRow][iCol] + '0';
SetWindowText(hwndLabels[iRow][iCol], szTemp);
}
}
どうしたの?なぜそれが機能しないのですか?