编程学习网 > 编程语言 > C/C++开发 > C语言可以进行哪些有趣的编程(c语言可以写什么有趣的程序)
2022
05-07

C语言可以进行哪些有趣的编程(c语言可以写什么有趣的程序)

数独,很多人都玩过吧。如下图所示,在一个9x9的面板中,已经填入了一些数字。要求你将所有剩余的空格填充完整,保证每一行都是1-9,每一列也是1-9,粗线隔开的9个小九宫格里边也是1-9,每一行、每一列、每个九宫格内都不允许出现重复的数字。这也就是C语言中的回溯法。接下来就带大家了解一下如何使用C语言来进行有趣的编程之九宫格计算。


代码实现

#include <iostream>
#include <ctime>
using namespace std;
int* getNextSpace  (int board[][9],int rowStart, int colStart) 
{
    if (colStart > 8) {
        rowStart++;
        colStart = 0;
    }
    if (rowStart > 8) {
        return new int[] {-1};
    }
    for (int j = colStart; j < 9; j++) {
        if (board[rowStart][j] == 0) {
            return new int[] {rowStart, j};
        }
    }
    rowStart++;
    if (rowStart > 8) 
    {
        return new int[] {-1};
    }
    for (int i = rowStart; i < 9; i++) 
    {
        for (int j = 0; j < 9; j++)
        {
            if (board[i][j] == 0) 
            {
                return new int[] {i, j};
            }
        }
    }
    return new int[] {-1};
}
bool validateBoard (int board[][9] ,int i,int j, int k) 
{
    // 纵向检查
    for (int m = 0; m < 9; m++) {
        if (board[m][j] == k) {
            return false;
        }
    }
    //横向检查
    for (int n = 0; n < 9; n++) {
        if (board[i][n] == k) {
            return false;
        }
    }
    //九宫格检查
    int p = i / 3 * 3;
    int q = j / 3 * 3;
    for (int x = p; x < p + 3; x++)
        for (int y = q; y < q + 3; y++) 
        {
            if (board[x][y] == k) {
                return false;
            }
        }
    return true;
}
void printResult   (int result[][9] )
{
    for (int i = 0; i < 9; i++) 
    {
        for (int j = 0; j < 9; j++) 
        {
            cout << result[i][j] << "\t";
        }
        cout << endl;
    }
}
void solveShuDu    (int board[][9], int i, int j) 
{
    //点代表空格,寻找下一个空格
    int* next = getNextSpace(board, i, j);
    if (next[0] == -1) {
        //找到了其中一个结果,就打印出来
        printResult(board);
        return;
    }
    int m = next[0];
    int n = next[1];
    //每个空格都有从1-9的取值机会
    for (char k = 1; k <=9; k++) {
        //验证是否符合要求
        if (validateBoard(board, m, n, k)) {
            board[m][n] = k;
            //进入下一层递归
            solveShuDu(board, m, n + 1);
            //回溯时,置回空格
            board[m][n] = 0;
        }
    }

}

int main()
{
    int start = clock();
    int board[][9] =
    {
        3,0,6,4,5,1,8,7,9,
        0,4,5,7,0,9,2,0,0,
        7,0,9,2,0,0,1,4,5,
        0,0,3,5,4,7,6,9,0,
        0,0,0,0,9,0,0,1,2,
        6,0,8,0,2,3,4,0,0,
        5,0,1,0,0,2,9,6,4,
        8,6,4,0,0,5,7,2,3,
        9,7,2,3,6,4,0,8,0
    };
    solveShuDu(board, 0, 0);
    int end = clock();
    cout <<"time:" << end - start << endl;
    return 0;
}

以上就是“C语言可以进行哪些有趣的编程(c语言可以写什么有趣的程序)”的详细内容,想要了解更多C语言教程欢迎持续关注编程学习网

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取