1

私は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);
        }

}

どうしたの?なぜそれが機能しないのですか?

4

0 に答える 0