大一C语言求解:解数独

问题遇到的现象和发生背景

求解求解只学到C语言,求解课堂:
在下面的数独中,用代码求出:任意去掉两个数字,求去掉哪两个位置的数字可以得到最多的数独的解,解为几个。
数独为

img

用代码块功能插入代码,请勿粘贴截图
#include
void PrintShudu();
void GetPossibleNum(int mask[9], int row, int col);
void FillCell(int row, int col);

int totalnum = 0;    //统计个数
int num[9][9] =
{
    4,0,0,9,0,0,0,0,3,
    0,8,0,0,0,1,0,9,0,    
    0,0,5,0,2,0,7,0,0,
    0,3,0,0,0,0,0,0,4,
    0,0,6,7,0,3,5,0,0,
    2,0,0,0,0,0,0,6,0,
    0,0,7,0,3,0,6,0,0,
    0,5,0,6,0,0,0,8,0,
    1,0,0,0,0,9,0,0,2,
};

int main(int argc, char* argv[])
{

    FillCell(0, 0);

    printf("所有可能出现的数独个数为%d\n", totalnum);//输出所有个数

    return 0;
}

void PrintShudu()
{
    for (int i = 0; i < 9; ++i)
    {
        for (int j = 0; j < 9; ++j)
        {
            printf("%d,", num[i][j]);
        }
        printf("\n");
    }

}


void GetPossibleNum(int mask[9], int row, int col)
{
    // row
    for (int c = 0; c < 9; ++c)
    {
        int data = num[row][c];
        if (data == 0)
            continue;
        mask[data - 1] = 1;
    }

    // column
    for (int r = 0; r < 9; ++r)
    {
        int data = num[r][col];
        if (data == 0)
            continue;
        mask[data - 1] = 1;
    }

    // 3*3
    for (int i = 0; i < 3; ++i)
    {
        for (int j = 0; j < 3; ++j)
        {
            int data = num[i + row / 3 * 3][j + col / 3 * 3];
            if (data == 0)
                continue;
            mask[data - 1] = 1;
        }
    }

}


void FillCell(int row, int col)
{
    int nextRow = row;
    int nextCol = col + 1;
    if (nextCol == 9)
    {
        nextCol = 0;
        nextRow = row + 1;
    }

    if (nextRow == 9)
    {
        PrintShudu();        
        printf("sucess!\n");
        totalnum += 1;//计算所有可能出现的个数

        return;
    }

    int data = num[row][col];
    if (data == 0)
    {
        int possibleNum[9] = { 0 };
        GetPossibleNum(possibleNum, row, col);
        for (int i = 0; i < 9; ++i)    
        {
            if (possibleNum[i] == 0)
            {
                num[row][col] = i + 1;
                FillCell(nextRow, nextCol);
            }
        }
        num[row][col] = 0;
    }
    else
    {
        FillCell(nextRow, nextCol);
    }

}





有两个疑问

  1. 数独要构成填入9个数字,横竖不能重复?还是啥样子的
  2. 这个代码是有问题还是啥?
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^