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. LeeCode哈希问题(二)

    LeeCode 454: 四数相加II 题目描述 给你四个整数数组 nums1.nums2.nums3 和 nums4,数组长度均为 n ,请你计算有多少个元组 (i, j, k, l) 能满足: \ ...

  2. 28-PWA

    const { resolve } = require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin') ...

  3. linux下live555编译和调试

    linux下live555编译和调试 live555 支持 h.264 初步告捷,可以播放,尽管不是很稳定,或者说暂时只能播放 1 帧(主要是我现在还不了解 帧的概念),同时还有 Mal SDP 的传 ...

  4. 前端js几种加密/解密方法

    https://www.jianshu.com/p/4c236d83ea04 https://blog.csdn.net/guxingsheng/article/details/84451573 vu ...

  5. (原创第一篇,踩坑无数得来的,对Ai自动化测试框架很有帮助)appium自动化测试时遇到不能使用element定位的在用坐标点击之后获取焦点如何输入文本

    现在开发的前端界面使用vue或者更牛逼技术,导致使用appium或者uiautomator2做自动化测试时不能识别到元素,无法使用传统的id,name或者xpath,这时我们需要使用坐标点击文本框.有 ...

  6. 2020-09-01:mysql里什么是检查点、保存点和中间点?

    福哥答案2020-09-01: 检查点checkpoint:批量刷盘.在一定程度上代表了刷到磁盘时日志所处的日志序列号(LSN)位置.标记重做日志中已经完成刷到磁盘的位置点,如果缓冲池中有很多重做日志 ...

  7. 2022-10-04:以下go语言代码输出什么?A:{123} main.T{x:123} B:{123} T{x:123} C:boo boo D:boo main.T{x:123}。 packag

    2022-10-04:以下go语言代码输出什么?A:{123} main.T{x:123} B:{123} T{x:123} C:boo boo D:boo main.T{x:123}. packag ...

  8. 2020-11-16:手写代码:leetcode第406题。假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。

    福哥答案2020-11-16: ①排序.按照[身高]降序排列.如果[身高]一样,按照[人数]升序排列.②插入.遍历这个队列,按照[人数]插入相应位置. 采用leetcode里的代码,golang代码如 ...

  9. 2022-05-16:A -> B,表示A认为B是红人, A -> B -> C,表示A认为B是红人,B认为C是红人,规定“认为”关系有传递性,所以A也认为C是红人, 给定一张有向图,方式是给定M个有

    2022-05-16:A -> B,表示A认为B是红人, A -> B -> C,表示A认为B是红人,B认为C是红人,规定"认为"关系有传递性,所以A也认为C是红 ...

  10. vue全家桶进阶之路18:Vue Router

    Vue Router 是 Vue.js 的官方路由管理器,它可以帮助我们实现单页应用(Single Page Application,SPA)的前端路由. Vue Router 基于 Vue.js 的 ...