无语死了的C语言小白 2023-11-28 07:03 采纳率: 50%
浏览 12
已结题

如何用C语言完成数独题

该如何用C语言完成这个9×9的数独题,该用到什么算法,完整的c代码是什么?并且代码要越简洁约好,运行时间越短越好,有佬可以解决吗

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-28 08:43
    关注

    【以下回答由 GPT 生成】

    以下是一个简单的用C语言实现的数独求解程序示例:

    #include <stdio.h>
    #define SIZE 9
    
    int grid[SIZE][SIZE];
    
    // 检查数字num在给定的行中是否合法
    int isSafeInRow(int row, int num) {
        for (int col = 0; col < SIZE; col++) {
            if (grid[row][col] == num) {
                return 0;
            }
        }
        return 1;
    }
    
    // 检查数字num在给定的列中是否合法
    int isSafeInCol(int col, int num) {
        for (int row = 0; row < SIZE; row++) {
            if (grid[row][col] == num) {
                return 0;
            }
        }
        return 1;
    }
    
    // 检查数字num在给定的九宫格中是否合法
    int isSafeInBox(int startRow, int startCol, int num) {
        for (int row = 0; row < 3; row++) {
            for (int col = 0; col < 3; col++) {
                if (grid[row + startRow][col + startCol] == num) {
                    return 0;
                }
            }
        }
        return 1;
    }
    
    // 检查数字num在给定位置是否合法
    int isSafe(int row, int col, int num) {
        return isSafeInRow(row, num) && isSafeInCol(col, num) && isSafeInBox(row - row % 3, col - col % 3, num);
    }
    
    // 在数独中搜索空格并尝试填入合适的数字
    int solveSudoku() {
        for (int row = 0; row < SIZE; row++) {
            for (int col = 0; col < SIZE; col++) {
                if (grid[row][col] == 0) {
                    for (int num = 1; num <= 9; num++) {
                        if (isSafe(row, col, num)) {
                            grid[row][col] = num;
                            if (solveSudoku()) {
                                return 1;
                            }
                            grid[row][col] = 0;
                        }
                    }
                    return 0;
                }
            }
        }
        return 1;
    }
    
    // 打印数独
    void printSudoku() {
        for (int row = 0; row < SIZE; row++) {
            for (int col = 0; col < SIZE; col++) {
                printf("%d ", grid[row][col]);
            }
            printf("\n");
        }
    }
    
    int main() {
        // 填入数独题目
        // 0表示空格
        int puzzle[SIZE][SIZE] = {
            {5, 3, 0, 0, 7, 0, 0, 0, 0},
            {6, 0, 0, 1, 9, 5, 0, 0, 0},
            {0, 9, 8, 0, 0, 0, 0, 6, 0},
            {8, 0, 0, 0, 6, 0, 0, 0, 3},
            {4, 0, 0, 8, 0, 3, 0, 0, 1},
            {7, 0, 0, 0, 2, 0, 0, 0, 6},
            {0, 6, 0, 0, 0, 0, 2, 8, 0},
            {0, 0, 0, 4, 1, 9, 0, 0, 5},
            {0, 0, 0, 0, 8, 0, 0, 7, 9}
        };
    
        // 将数独题目复制到grid数组中
        for (int row = 0; row < SIZE; row++) {
            for (int col = 0; col < SIZE; col++) {
                grid[row][col] = puzzle[row][col];
            }
        }
    
        if (solveSudoku()) {
            printf("解答:\n");
            printSudoku();
        } else {
            printf("该数独题目无解。\n");
        }
    
        return 0;
    }
    

    你可以在此基础上进一步优化和调整代码,以适应你的需求和编程风格。如果你对代码有任何疑问,请随时询问。



    【相关推荐】



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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月30日
  • 创建了问题 11月28日

悬赏问题

  • ¥15 根据历年月数据,用Stata预测未来六个月汇率
  • ¥15 DevEco studio开发工具 真机联调找不到手机设备
  • ¥15 请教前后端分离的问题
  • ¥100 冷钱包突然失效,急寻解决方案
  • ¥15 下载honeyd时报错 configure: error: you need to instal a more recent version of libdnet
  • ¥15 距离软磁铁一定距离的磁感应强度大小怎么求
  • ¥15 霍尔传感器hmc5883l的xyz轴输出和该点的磁感应强度大小的关系是什么
  • ¥15 vscode开发micropython,import模块出现异常
  • ¥20 Excel数据自动录入表单并提交
  • ¥30 silcavo仿真,30分钟,只需要代码