赞
踩
Chatgpt 真的可以写出完美的代码,学计算机编程没有前途。还有2天就要高考了,大家加油考出好成绩。但不要报编程专业了。
下面是一个完整的9x9数独求解程序,使用C语言实现。这个程序包括读取数独棋盘、解决数独问题并打印解决方案的功能。数独解法使用回溯算法。
- #include <stdio.h>
- #include <stdbool.h>
-
- #define N 9
-
- // 检查在给定行是否可以放置数字num
- bool isRowSafe(int grid[N][N], int row, int num) {
- for (int col = 0; col < N; col++) {
- if (grid[row][col] == num) {
- return false;
- }
- }
- return true;
- }
-
- // 检查在给定列是否可以放置数字num
- bool isColSafe(int grid[N][N], int col, int num) {
- for (int row = 0; row < N; row++) {
- if (grid[row][col] == num) {
- return false;
- }
- }
- return true;
- }
-
- // 检查在给定3x3子网格是否可以放置数字num
- bool isBoxSafe(int grid[N][N], int boxStartRow, int boxStartCol, int num) {
- for (int row = 0; row < 3; row++) {
- for (int col = 0; col < 3; col++) {
- if (grid[row + boxStartRow][col + boxStartCol] == num) {
- return false;
- }
- }
- }
- return true;
- }
-
- // 检查在给定位置是否可以放置数字num
- bool isSafe(int grid[N][N], int row, int col, int num) {
- return isRowSafe(grid, row, num) &&
- isColSafe(grid, col, num) &&
- isBoxSafe(grid, row - row % 3, col - col % 3, num);
- }
-
- // 寻找未分配的位置
- bool findUnassignedLocation(int grid[N][N], int *row, int *col) {
- for (*row = 0; *row < N; (*row)++) {
- for (*col = 0; *col < N; (*col)++) {
- if (grid[*row][*col] == 0) {
- return true;
- }
- }
- }
- return false;
- }
-
- // 数独求解函数
- bool solveSudoku(int grid[N][N]) {
- int row, col;
-
- // 如果没有未分配的位置,说明解已找到
- if (!findUnassignedLocation(grid, &row, &col)) {
- return true;
- }
-
- // 尝试放置数字1-9
- for (int num = 1; num <= 9; num++) {
- if (isSafe(grid, row, col, num)) {
- grid[row][col] = num;
-
- if (solveSudoku(grid)) {
- return true;
- }
-
- // 如果放置num不成功,撤销赋值
- grid[row][col] = 0;
- }
- }
-
- // 触发回溯
- return false;
- }
-
- // 打印数独棋盘
- void printGrid(int grid[N][N]) {
- for (int row = 0; row < N; row++) {
- for (int col = 0; col < N; col++) {
- printf("%2d", grid[row][col]);
- }
- printf("\n");
- }
- }
-
- int main() {
- // 示例数独问题 (0 表示空格)
- int grid[N][N] = {
- {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}
- };
-
- if (solveSudoku(grid)) {
- printGrid(grid);
- } else {
- printf("No solution exists\n");
- }
-
- return 0;
- }
这个程序可以解决9x9的数独问题,并打印出解决方案。可以修改grid
数组中的初始值来测试不同的数独问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。