1.15 构造数独
来源:互联网 发布:巴雷特狙击枪cad数据 编辑:程序博客网 时间:2024/04/29 11:02
(一)
用回溯法构造数独
#include <iostream>#include <cstring>#include <ctime>#include <cstdio>#include <cstdlib>using namespace std;int sudu[9][9];void sudu_print(int sudu[][9]) { for(int i = 0; i < 9; ++i) { for(int j = 0; j < 9; ++j) { cout << " " << sudu[i][j]; } cout << endl; };}bool is_digital_sudu(int sudu[][9], int i, int j) { for(int k = 0; k < 9; ++k) { if(k == j) continue; if(sudu[i][k] == sudu[i][j]) return false; } for(int k = 0; k < 9; ++k) { if(k == i) continue; if(sudu[k][j] == sudu[i][j]) return false; } int p = i / 3; int q = j / 3; for(int m = 3 * p; m < 3 * p + 3; ++m) { for(int n = 3 * q; n < 3 * q + 3; ++n) if(m != i && n != j && sudu[m][n] == sudu[i][j]) return false; } return true;}int main() { srand(time(0)); memset(sudu, 0, sizeof(sudu)); for(int i = 0; i < 9; ++i) { int temp = rand() % 81; sudu[temp/9][temp%9] = i + 1; } int k = 0; while(1) { int x = k / 9; int y = k % 9; while(1) { sudu[x][y]++; if(sudu[x][y] == 10) { sudu[x][y] = 0; --k; break; }else if(is_digital_sudu(sudu, x, y)) { k++; break; } } if(81 == k) { sudu_print(sudu); return 0; } } return 0;}
在LINUX下执行的话,先执行命令:g++ 文件名.cpp 然后如果程序没有错误的话,那么在该目录下面会自动生成一个文件:.out。所以这个时候继续在该目录下执行:
./a.out
(二)
利用书上的置换的方法,简单。。。。。。
0 0
- 1.15 构造数独
- 编程之美 1.15 构造数独
- 构造数独
- 构造数独
- 构造数独
- 构造数独
- 构造数独
- 构造数独和解数独
- 算法杂谈--构造数独
- 读书笔记之编程之美 - 1.15 构造数独
- 编程之美1.15——构造数独
- 编程之美1.15——构造数独
- 编程之美:第一章 1.15构造数独
- 编程之美...构造数独
- 第一章 游戏之乐 构造数独
- 编程之美1.15节:构造数独算法-回溯法和置换法
- 编程之美1.15构造数独-----回溯法java版
- 编程之美1.15构造数独---置换法java版
- 【普及分享】云计算=/=云主机,阿里云=低价低端
- Accelerated C++:通过示例进行编程实践——练习解答(第7章)
- 【DB.PL/SQL】程序数据类型 ——
- 平板适配的技巧
- 第8周项目4-个人所得税计算器
- 1.15 构造数独
- 【C++ vector】容器类的使用(存放视频帧,生成视频示例)
- uvaoj 11324 - The Largest Clique
- 两地办公代码版本管理方案
- Accelerated C++:通过示例进行编程实践——练习解答(第8章)
- cocos2d-x 3.2 例子文件工程的位置
- 第八周项目4个人所得税计算器
- Android多线程设计模式---wait()和notify()机制
- USACO Section 1.3 Ski Course Design