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 ...
随机推荐
- 生成器、迭代器、高级函数、map、reduce和filter
1.创建生成器(generation)的两种方法: 第一种就是通过将列表生成式的{}改为() 第二种就是函数中包含yield关键字的函数 2.迭代器是指可以不断返回下一个值的对象,我们可以导入from ...
- 【LeetCode动态规划#06】分割等和子集(01背包问题一维写法实战)
分割等和子集 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums .请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 示例 1: 输入:nums = [1,5,11,5 ...
- SpringBoot 整合 JDBC 实例
0.数据库表 CREATE DATABASE springboot; USE springboot; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_ ...
- android studio 做登陆界面
先来一个最简单的 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> &l ...
- canvas-绘制3D金字塔
var canvas1 = document.getElementById("canvas1"); var context = canvas1.getContext("2 ...
- js函数-参数默认值
1. 在es6之前必须通过函数内部实现 就像以下的几种情况: function example(a,b){ var a = arguments[0] ? arguments[0] : 1;//设置参数 ...
- 使用Jmeter进行CPU、内存等监控
一.需要的准备 1.jp@gc - PerfMon Metrics Collector插件(安装方法就不过多介绍啦!) 2.ServerAgent服务器(下载:https://github.com/u ...
- 继承 extends
首先是基础的继承关系,用extend就可以继承. 再者是继承的东西,包括:变量(也包括类变量).全部非私有的属性和方法(除了父类的构造方法) 注:构造方法 class C{ public C() { ...
- 2022-06-22:golang选择题,以下golang代码输出什么?A:3;B:1;C:4;D:编译失败。 package main import ( “fmt“ ) func mai
2022-06-22:golang选择题,以下golang代码输出什么?A:3:B:1:C:4:D:编译失败. package main import ( "fmt" ) func ...
- 2022-02-06:等差数列划分 II - 子序列。 给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目。 如果一个序列中 至少有三个元素 ,并且任意两个相邻元素之差相同,则称
2022-02-06:等差数列划分 II - 子序列. 给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目. 如果一个序列中 至少有三个元素 ,并且任意两个相邻元素之差相同,则称 ...