简单数独求解算法(C语言)
2014-07-06 21:51
459 查看
#include <stdio.h> 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) { temp = findvalue(sudoku, i, j); if(temp==-1) { printf("无解!\n"); return 1; } sudoku[i][j] = temp; if(temp!=0) empty--; } } } } for(i=0; i<9; i++) { for(j=0; j<9; j++) printf("%d ", sudoku[i][j]); printf("\n"); } return 0; } int findvalue(int sudoku[9][9], int i, int j) { int m, n, k; int temp[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; for(k=1; k<10; k++) { if(temp[sudoku[i][k-1]]==0) temp[sudoku[i][k-1]] = sudoku[i][k-1]; if(temp[sudoku[k-1][j]]==0) temp[sudoku[k-1][j]] = sudoku[k-1][j]; } for(m=0; m<3; m++) for(n=0; n<3; n++) if(temp[sudoku[i/3*3+m][j/3*3+n]]==0) temp[sudoku[i/3*3+m][j/3*3+n]] = sudoku[i/3*3+m][j/3*3+n]; for(k=1; k<10; k++) if(temp[k]==0) { temp[0]++; m=k; } if(temp[0]==0) return -1; else if(temp[0]==1) return m; else return 0; }
相关文章推荐
- 数独问题的一种简单算法代码实现
- 魔方简单实现(c语言,tc2.0编译通过)不含解魔方的算法
- 算法实践——改良的求解数独的暴力搜索法
- C语言初步;简单的算法及程序;
- 简单的C语言算法举例
- (C语言)二分算法实现简单猜数
- C语言base64算法简单实现
- 数独的求解算法 回溯
- 最简单的暴力求解算法 简单枚举
- 递归学习(一)最简单的C语言递归求年龄算法
- 数独算法求解
- 数独求解——面向对象解决算法问题(一)
- C语言几种简单的算法实现2
- 算法实践——舞蹈链(Dancing Links)算法求解数独
- day09-关于C语言数组的学习与简单的算法
- 九宫格 数独 求解 算法 栈实现
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
- LRU算法的简单实现( C语言 + uthash包)
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
- C语言简单算法的编写