数独的编程c语言,简单数独求解算法(C语言)

#include 

int findvalue(int sudoku[9][9], int i, int j);

int main(void)

{

int sudoku[9][9] = { {0, 3, 0, 0, 0, 7, 0, 0, 0},

{1, 2, 5, 0, 0, 9, 4, 0, 0},

{0, 7, 9, 1, 0, 0, 0, 3, 0},

{0, 0, 6, 0, 8, 0, 0, 9, 1},

{0, 0, 0, 9, 5, 1, 0, 0, 0},

{9, 1, 0, 0, 7, 0, 5, 0, 0},

{0, 9, 0, 0, 0, 5, 7, 4, 0},

{0, 0, 8, 7, 0, 0, 2, 6, 9},

{0, 0, 0, 4, 0, 0, 0, 5, 0} };

int i, j, temp, empty = 0;

for(i=0; i<9; i++)

{

for(j=0; j<9; j++)

if(sudoku[i][j]==0)

empty++;

}

printf("%d\n", empty);

while(empty)

{

for(i=0; i<9; i++)

{

for(j=0; j<9; j++)

{

if(sudoku[i][j]==0)

{ <

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数独是一种古老的数学逻辑游戏,通过填入数字1-9,使得每行、每列和每个3x3的小九宫格内数字都不重复。下面是一个简单C语言数独算法: #include <stdio.h> #define N 9 bool isSafe(int board[N][N], int row, int col, int num) { for (int x = 0; x < N; x++) { if (board[row][x] == num || board[x][col] == num) { return false; } } int startRow = row - row % 3; int startCol = col - col % 3; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (board[i + startRow][j + startCol] == num) { return false; } } } return true; } bool solveSudoku(int board[N][N]) { int row, col; bool isEmpty = false; for (row = 0; row < N; row++) { for (col = 0; col < N; col++) { if (board[row][col] == 0) { isEmpty = true; break; } } if (isEmpty) { break; } } if (!isEmpty) { return true; } for (int num = 1; num <= 9; num++) { if (isSafe(board, row, col, num)) { board[row][col] = num; if (solveSudoku(board)) { return true; } board[row][col] = 0; } } return false; } void printBoard(int board[N][N]) { for (int row = 0; row < N; row++) { for (int col = 0; col < N; col++) { printf("%d ", board[row][col]); } printf("\n"); } } int main() { int board[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(board)) { printBoard(board); } else { printf("No solution exists"); } return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值