c语言数独棋盘怎么做

数独是一个逻辑游戏,目标是在9×9的网格中填入数字19,使得每行、每列和每个3×3的小网格中的数字都不重复,在C语言中,我们可以通过二维数组来表示数独棋盘,并通过循环和条件判断来实现游戏的玩法。

以下是一个简单的C语言数独棋盘实现:

1、我们需要定义一个二维数组来表示数独棋盘,我们可以使用int类型的数组,数组的大小为9×9。

int board[9][9] = {0};

2、接下来,我们需要实现一个函数来初始化数独棋盘,我们可以将19的数字随机填入棋盘,确保每行、每列和每个3×3的小网格中的数字都不重复。

void init_board() {
    srand(time(NULL));
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            board[i][j] = rand() % 9 + 1;
        }
    }
}

3、我们需要实现一个函数来检查当前棋盘状态是否合法,我们可以遍历棋盘,检查每行、每列和每个3×3的小网格中的数字是否重复,如果有重复,返回0表示不合法;否则返回1表示合法。

int is_valid() {
    for (int i = 0; i < 9; i++) {
        int row[9] = {0};
        int col[9] = {0};
        int box[9] = {0};
        for (int j = 0; j < 9; j++) {
            if (board[i][j] != 0) {
                if (row[board[i][j]] == 1 || col[board[i][j]] == 1 || box[board[i][j] 1] == 1) {
                    return 0;
                }
                row[board[i][j]] = 1;
                col[board[i][j]] = 1;
                box[board[i][j] 1] = 1;
            }
        }
    }
    for (int i = 0; i < 9; i++) {
        int row[9] = {0};
        int col[9] = {0};
        int box[9] = {0};
        for (int j = 0; j < 9; j += 3) {
            for (int k = 0; k < 3; k++) {
                for (int l = 0; l < 3; l++) {
                    if (board[i + k][j + l] != 0) {
                        if (row[board[i + k][j + l]] == 1 || col[board[i + k][j + l]] == 1 || box[board[i + k][j + l] 1] == 1) {
                            return 0;
                        }
                        row[board[i + k][j + l]] = 1;
                        col[board[i + k][j + l]] = 1;
                        box[board[i + k][j + l] 1] = 1;
                    }
                }
            }
        }
    }
    return 1;
}

4、我们需要实现一个函数来打印数独棋盘,我们可以遍历棋盘,将每个格子的数字打印出来,为了美观,我们可以在每行末尾添加换行符。

void print_board() {
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            printf("%d ", board[i][j]);
        }
        printf("
");
    }
}

5、在主函数中,我们可以先初始化数独棋盘,然后不断尝试填入数字,直到找到一个合法的解,我们可以使用键盘输入来获取用户填入的数字,然后更新棋盘状态,如果找到合法解,我们可以打印出来并结束游戏;否则提示用户重新输入。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define NDEBUG //取消断言调试功能,提高运行效率(可选项)*/
#include  //包含断言库(可选项)*/*/ /*定义常量*/*/ #define NDEBUG //取消断言调试功能,提高运行效率(可选项)*/ #include  //包含断言库(可选项)*/*/ /*定义常量*/*/ //定义常量*/*/ //定义常量*/*/ int main() { //主函数开始 */ init_board(); //初始化数独棋盘 while (1) { //无限循环 print_board(); //打印数独棋盘 char input[2]; //用于存储用户输入的数字 scanf("%s", input); //读取用户输入的数字 int num = atoi(input); //将字符串转换为整数 if (is_valid()) { //如果当前棋盘状态合法 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (board[i][j] == 0 && num > 0) { board[i][j] = num; break; } } if (board[i][j] != 0) { num; continue; } } } else { //如果当前棋盘状态不合法,提示用户重新输入 while (!isdigit(input[0])) { input[0] = getch(); } } } } return 0; //主函数结束 } //主函数结束 *//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*//*主函数结束*/ /*定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义常量*///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *///定义为空字符 *//

本文标题:c语言数独棋盘怎么做
转载来于:http://www.csdahua.cn/qtweb/news49/319849.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网