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++ 数独游戏的更多相关文章

  1. 用html5 canvas和JS写个数独游戏

    为啥要写这个游戏? 因为我儿子二年级数字下册最后一章讲到了数独.他想玩儿. 因为我也想玩有提示功能的数独. 因为我也正想决定要把HTML5和JS搞搞熟.熟悉一个编程平台,最好的办法,就是了解其原理与思 ...

  2. Scrum4.0+5.0 数独游戏

    1.题目: 1.准备看板. 形式参考图4. 2.任务认领,并把认领人标注在看板上的任务标签上. 先由个人主动领任务,PM根据具体情况进行任务的平衡. 然后每个人都着手实现自己的任务. 3.为了团队合作 ...

  3. android数独游戏

    最近没事干,照着视频教程写了一个数独游戏,很粗糙还有很多要修改的地方.下面就来说说这个游戏吧 1.自定义一个View控件,用来在屏幕上显示一个9*9的格子,其实就是横着画8条线,竖着画8跳线,然后将其 ...

  4. android开发——数独游戏

    最近研究了一下android,写了一个数独游戏,具体如下: 游戏界面需要重写一个ShuduView继承View, 然后自定义一个Dialog: 1.需要继承 Dialog 类, 2.并要定义一个有参构 ...

  5. C语言学习 数独游戏

    摘要:花了1周多时间学习了C语言,开始练手写解数独游戏的程序. C语言学习 数独游戏 作者:乌龙哈里 时间:2015-11-22 平台:Window7 64bit,TCC 0.9.26(x86-64 ...

  6. 【DFS】数独游戏

    DFS(深度优先搜索): 深度优先搜索算法(英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法. 沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在 ...

  7. 创建随机的9x9数独游戏终盘并打印

    创建随机的9x9数独游戏终盘并打印 项目github地址 1. 项目相关要求 1.1 要求 利用程序随机构造出N个已解答的9x9数独棋盘 . 输入 数独棋盘题目个数N(0<N<=10000 ...

  8. 经典数独游戏+数独求解器—纯C语言实现

    "心常乐数独小游戏"(下面简称"本软件")是一款windows平台下的数独游戏软件. 本软件是开源.免费软件. 本软件使用纯C语言编写,MinGW编译,NSIS ...

  9. java程序计算数独游戏

    兴趣来了,写了个简单的数独游戏计算程序,未做算法优化. 通过文件来输入一个二维数组,9行,每行9个数组,数独游戏中需要填空的地方用0来表示.结果也是打印二维数组. import java.io.Fil ...

  10. Swift数独游戏优化——C++与OC混编、plist自动生成

    一.为什么要C++与OC混编? 在我之前的数独游戏中涉及到的数独游戏生成算法是参考的网上其他人的算法,是利用C++来实现的.   但是在我的例子中我发现这样存在一定的局限性: 1.我是利用Termin ...

随机推荐

  1. 在Blazor中使用Chart.js

    1. 在Blazor中使用Chart.js 首先,从Chart.js官方网站下载Chart.js库文件. 推荐下载这个构建好的版本https://cdnjs.com/libraries/Chart.j ...

  2. Spring自定义参数解析器设计

    作者:京东零售 王鹏超 1.什么是参数解析器 @RequstBody.@RequstParam 这些注解是不是很熟悉? 我们在开发Controller接口时经常会用到此类参数注解,那这些注解的作用是什 ...

  3. JAVA注解@Scheduled 不执行

    spring boot项目需要在启动类加上注解 @EnableScheduling 定义一个接口 StockTask.java 1 public interface StockTask { 2 pub ...

  4. islider.js轮播图

    本篇文章地址:https://www.cnblogs.com/Thehorse/p/11601032.html css #iSlider-effect-wrapper { height: 220px; ...

  5. 2022CSP游记

    目录 CSP-J2022 7:45 8:15 8:27 8:38 9:12 9:23 10:34 11:57 中午 CSP-S2022 2:27 4:15 6:12 估分 普及 提高 自查 出分 废物 ...

  6. java线程的创建

    文章目录 前言 进程 线程 使用线程 继承Thread 线程随机性 .start()的顺序不代表.run()的顺序 实现Runnable 实例共享造成的非线程安全问题 线程常用方法: 判断线程是否为停 ...

  7. flutter系列之:做一个修改组件属性的动画

    目录 简介 flutter中的动画widget AnimatedContainers使用举例 总结 简介 什么是动画呢?动画实际上就是不同的图片连续起来形成的.flutter为我们提供了一个Anima ...

  8. 【Python基础】变量的作用域与global、nonlocal

    在 Python 中,变量的作用域指的是变量可以被访问的范围.Python 中的变量作用域有两种: 局部作用域:变量在函数函数内部的时候,只能在函数内部使用.这样的变量被称为局部变量. 如果在函数内部 ...

  9. 手机端调试工具vConsole

    vConsole 一个轻量.可拓展.针对手机网页的前端开发者调试面板. vConsole 是框架无关的,可以在 Vue.React 或其他任何框架中使用. 现在 vConsole 是微信小程序的官方调 ...

  10. 音视频八股文(9)-- flv的h264六层结构和aac六层结构

    flv介绍 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的⾳视频⽂件体积⼩.封装简单等特点,⾮常适合于互联⽹上使⽤.⽬前主流的视频⽹站基本都⽀持FLV.采⽤FLV ...