C++ 数独游戏
C++ 数独游戏
直接上代码:
1 // 数独 sudoku
2
3 #include <iostream>
4
5 using namespace std;
6
7 int P[9][9];
8 bool flag = false;
9
10 // 处理输入
11 void input(){
12 char t;
13 cout << "输入棋盘,空用 0 表示\n";
14 for(int i = 0; i < 9; i ++){
15 for(int j = 0; j < 9; j ++){
16 cin >> t;
17 P[i][j] = t - '0';
18 }
19 }
20 }
21
22 // 处理输出
23 void output(){
24 for(int i = 0; i < 9; i ++){
25 for(int j = 0; j < 9; j ++){
26
27 if(P[i][j]){
28 cout << P[i][j];
29 }else{
30 cout << " ";
31 }
32
33 if(j%3 == 2) cout << " ";
34 }
35 if(i%3 == 2) cout << endl;
36 cout << endl;
37 }
38
39 }
40
41 // 判断即将放入的 是否符合条件
42 bool check(int n, int num){
43
44 // 行
45 for(int i = 0; i < 9; i ++){
46 if(P[n/9][i] == num){
47 return false;
48 }
49 }
50
51 // 列
52 for(int i = 0; i < 9; i ++){
53 if(P[i][n%9] == num){
54 return false;
55 }
56 }
57
58 // 宫
59 int x = n / 9 / 3 * 3;
60 int y = n % 9 / 3 * 3;
61 for(int i = 0; i < 3; i ++){
62 for(int j = 0; j < 3; j ++){
63 if(P[x+i][y+j] == num){
64 return false;
65 }
66 }
67 }
68
69 return true;
70 }
71
72 // [n/9][n%9]
73 void dfs(int n){
74
75 // 成功
76 if(n > 80){
77 flag = true;
78 return;
79 }
80
81 int x = n/9, y = n%9;
82 // 有值 跳过
83 if(P[x][y]){
84 dfs(n+1);
85 return;
86 }
87 // 遍历
88 for(int i = 1; i <= 9; i ++){
89 // 判断
90 if(check(n, i)){
91 // 判断成功 赋值
92 P[x][y] = i;
93 dfs(n+1);
94 // 退出时判断是否完成 完成时退出
95 if(flag){
96 return;
97 }
98 // 未完成 重置棋盘
99 P[x][y] = 0;
100 }
101 }
102 }
103
104 int main(){
105 input();
106 cout << endl << endl;
107 dfs(0);
108 output();
109 return 0;
110 }
111
112
113 /*
114
115 测试用例
116
117 170004000
118 360810054
119 008050109
120 007035048
121 000000270
122 000008601
123 000060080
124 700000000
125 000403016
126
127 */
测试用例子结果

百度百科 世界最难数独
答案秒出, 没有什么是暴力解决不了的~

楠少博客同步更新:https://blog.nanshaobit.top/95
C++ 数独游戏的更多相关文章
- 用html5 canvas和JS写个数独游戏
为啥要写这个游戏? 因为我儿子二年级数字下册最后一章讲到了数独.他想玩儿. 因为我也想玩有提示功能的数独. 因为我也正想决定要把HTML5和JS搞搞熟.熟悉一个编程平台,最好的办法,就是了解其原理与思 ...
- Scrum4.0+5.0 数独游戏
1.题目: 1.准备看板. 形式参考图4. 2.任务认领,并把认领人标注在看板上的任务标签上. 先由个人主动领任务,PM根据具体情况进行任务的平衡. 然后每个人都着手实现自己的任务. 3.为了团队合作 ...
- android数独游戏
最近没事干,照着视频教程写了一个数独游戏,很粗糙还有很多要修改的地方.下面就来说说这个游戏吧 1.自定义一个View控件,用来在屏幕上显示一个9*9的格子,其实就是横着画8条线,竖着画8跳线,然后将其 ...
- android开发——数独游戏
最近研究了一下android,写了一个数独游戏,具体如下: 游戏界面需要重写一个ShuduView继承View, 然后自定义一个Dialog: 1.需要继承 Dialog 类, 2.并要定义一个有参构 ...
- C语言学习 数独游戏
摘要:花了1周多时间学习了C语言,开始练手写解数独游戏的程序. C语言学习 数独游戏 作者:乌龙哈里 时间:2015-11-22 平台:Window7 64bit,TCC 0.9.26(x86-64 ...
- 【DFS】数独游戏
DFS(深度优先搜索): 深度优先搜索算法(英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法. 沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在 ...
- 创建随机的9x9数独游戏终盘并打印
创建随机的9x9数独游戏终盘并打印 项目github地址 1. 项目相关要求 1.1 要求 利用程序随机构造出N个已解答的9x9数独棋盘 . 输入 数独棋盘题目个数N(0<N<=10000 ...
- 经典数独游戏+数独求解器—纯C语言实现
"心常乐数独小游戏"(下面简称"本软件")是一款windows平台下的数独游戏软件. 本软件是开源.免费软件. 本软件使用纯C语言编写,MinGW编译,NSIS ...
- java程序计算数独游戏
兴趣来了,写了个简单的数独游戏计算程序,未做算法优化. 通过文件来输入一个二维数组,9行,每行9个数组,数独游戏中需要填空的地方用0来表示.结果也是打印二维数组. import java.io.Fil ...
- Swift数独游戏优化——C++与OC混编、plist自动生成
一.为什么要C++与OC混编? 在我之前的数独游戏中涉及到的数独游戏生成算法是参考的网上其他人的算法,是利用C++来实现的. 但是在我的例子中我发现这样存在一定的局限性: 1.我是利用Termin ...
随机推荐
- [大数据]ETL之增量数据抽取(CDC)
关于:转载/知识产权 本文遵循 GPL开源协议,如若转载: 1 请发邮件至博主,以作申请声明. 2 请于引用文章的显著处注明来源([大数据]ETL之增量数据抽取(CDC) - https://www. ...
- 如何训练个人的ChatGpt4
如何在自己的计算机上安装类似 ChatGPT 的个人 AI 并在没有互联网的情况下运行它 本文旨在为任何人安装此软件.最初它有一个视频,伴随着操作方法,但是事情变化很快,我的三次尝试只是推迟了我发表这 ...
- 在有限 computational budget 下,借助 low-fidelity 模型提高精度
论文名称:context-aware learning of hierarchies of low-fidelity models for multi-fidelity uncertainty qua ...
- VUE项目 启动提示 npn ERRT nissing script: dev解决办法
VUE项目 启动提示 npn ERRT nissing script: dev 提示 丢失 dev 解决办法 首先 查看项目目录里面的 package.json 文件, 文件内容如下: 发现红框这里是 ...
- ARL:资产侦察灯塔系统
资产灯塔,不仅仅是域名收集 功能简介 "挖洞神器"资产安全灯塔(ARL),旨在快速侦察与目标关联的互联网资产,构建基础资产信息库. 协助甲方安全团队或者渗透测试人员有效侦察和检索资 ...
- 在Linux上安装redis7
1.检测虚拟机环境 1.1 bit检测命令:getconf LONG_BIT(建议使用64bit做开发) 1.2 gcc环境检测:gcc -v 如果不具备gcc环境,则使用yum -y install ...
- [双目视差] 立体匹配-SGBM半全局立体匹配算法
立体匹配-SGBM半全局立体匹配算法 一.SGBM算法实现过程 1.预处理 预处理目的是得到图像的梯度信息 Step1:SGBM采用水平Sobel算子,对图像做处理,公式为: Sobel(x,y)=2 ...
- .NET开源分布式锁DistributedLock
一.线程锁和分布式锁 线程锁通常在单个进程中使用,以防止多个线程同时访问共享资源. 在我们.NET中常见的线程锁有: 自旋锁:当线程尝试获取锁时,它会重复执行一些简单的指令,直到锁可用 互斥锁: Mu ...
- (原创第一篇,踩坑无数得来的,对Ai自动化测试框架很有帮助)appium自动化测试时遇到不能使用element定位的在用坐标点击之后获取焦点如何输入文本
现在开发的前端界面使用vue或者更牛逼技术,导致使用appium或者uiautomator2做自动化测试时不能识别到元素,无法使用传统的id,name或者xpath,这时我们需要使用坐标点击文本框.有 ...
- 搭建一个简易框架 3秒创建一个WebApi接口
前端ajax请求数据,传递的参数都是一个json字符串,经过多次解析发现其实都是一个DataSet {"selectA1":[{"Name":"156 ...