题目要求很简单 就是给一个6*6的数独输入 关于6 * 6的数独介绍:

玩数独你应该知道,每行/列数字不能重复,每个3*2的方格内不能重复,该题目是来自某公司的笔试题。采用C++算法进行求解。该代码也没有考虑无解的情况,和力扣上的一道类似。

1 2 3 4 5 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

求解出该输出

1 2 3 | 4 5 6
4 5 6 | 1 2 3
------|------
3 1 4 | 2 6 5
2 6 5 | 3 1 4
-------------
5 3 1 | 6 4 2
6 4 2 | 5 3 1

直接上代码通过暴力回溯直接 找到最佳值

#include <bits/stdc++.h>using namespace std;int m = 6; // 阶数
int boxRow = 2, boxCol = 3;
bool sudokuSolved = false;vector<vector<int> > rowOccupied(6, vector<int>(7));
vector<vector<int> > colOccupied(6, vector<int>(7));
vector<vector<int> > boxOccupied(6, vector<int>(7));
vector<vector<int> > shudoPan(m, vector<int>(m));void Initialize(vector<vector<int> > Occupied) {for(int i = 0; i < m; i++) {for(int k = 0; k < m+1; k++) {Occupied[i][k] = 0;}}
}bool couldPlace(int d, int row, int col) {//判断某格子是否可以放置if(boxRow > 0) {int idx = (row / boxRow ) * boxRow + col / boxCol;return rowOccupied[row][d] + colOccupied[col][d] + boxOccupied[idx][d] == 0;}else {return rowOccupied[row][d] + colOccupied[col][d] == 0;}}void backtrack(int row, int col) {if(shudoPan[row][col] == 0) {for(int d = 1; d <= m; d++) {int idx = 0;if(boxRow > 0) {idx = (row / boxRow ) * boxRow + col / boxCol;}if(couldPlace(d, row, col)) {//填充数字,并设置填充限制boxOccupied[idx][d]++;rowOccupied[row][d]++;colOccupied[col][d]++;shudoPan[row][col] = d;//是否填充到最后一格if ((col == m-1) && (row == m-1)) {sudokuSolved = true;}else {//当到达最后一列的格子,下一个格子跳转到下一行if (col == m-1) {backtrack(row + 1, 0);}else {backtrack(row, col + 1);}}if(!sudokuSolved) {//移除填充后无法进行后续填充的数boxOccupied[idx][d]--;rowOccupied[row][d]--;colOccupied[col][d]--;shudoPan[row][col] = 0;}}}}else {if ((col == m-1) && (row == m-1)) {sudokuSolved = true;}else {//当到达最后一列的格子,下一个格子跳转到下一行if (col == m-1) {backtrack(row + 1, 0);}else {backtrack(row, col + 1);}}}
}void solveSudoku() {// 初始化某数所在行、列、宫for (int i = 0; i < m; i++) {for (int k = 0; k < m; k++) {int num = shudoPan[i][k];if (num != 0) {int d = num;if(boxRow > 0) {int idx = (i / boxRow ) * boxRow + k / boxCol;boxOccupied[idx][d]++;}rowOccupied[i][d]++;colOccupied[k][d]++;}}}backtrack(0, 0);
}int main() {for(int i = 0; i < m; i++)for(int j = 0; j < m; j++)cin >> shudoPan[i][j];solveSudoku();for(int i = 0; i < m; i++) {for (int j = 0; j < m; j++) {cout << shudoPan[i][j] << " ";if(j == 2)cout << "| ";}cout << endl;if (i == 1 || i == 3)cout << "------|------" << endl;}return 0;
}

数独游戏代码C++解法相关推荐

  1. java数独流程图_九宫格数独游戏C语言解法

    最近几天深圳一直下雨,一个人闷在屋里很是无聊,偶然打开一个小游戏网站看到了我的最爱--九宫格数独游戏.共有1-5五个难度级别,像我这种资深玩家其他难度就不用考虑了,冲着难度5的题目就去了,结果做地汗流 ...

  2. 数独游戏求解:解法适用于任意阶数的数独

    0.数独简介 数独(すうどく,Sūdoku)是一种运用纸.笔进行演算的逻辑游戏.以九阶数独为例,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字 ...

  3. Linux数独小游戏C语言,发一个自己制作的数独游戏代码!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void draw(int i,int j) {setcolor(5); rectangle(45+j*30,45+i*30,36+(j+1)*30,36 ...

  4. 数独游戏的解法到App的实现

    在LeetCode上偶然刷到一个解数独的题目: 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次 ...

  5. [WebAssembly 入门] 实现数独游戏 - 如何优雅的组织Rust代码

    title: [WebAssembly 入门] 实现数独游戏 - 如何优雅的组织Rust代码 date: 2018-4-23 22:55:00 categories: WebAssembly, 笔记 ...

  6. python数独游戏源代码100行_python实现解数独程序代码

    偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...

  7. Python游戏项目:69行代码编写记忆数独游戏

    2019独角兽企业重金招聘Python工程师标准>>> 前言 freegames是Apache2许可的免费Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用编写就好 ...

  8. 数独游戏完整java代码_Java实现蓝桥杯数独游戏的示例代码

    你一定听说过"数独"游戏. 如图,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独的答案都是唯一 ...

  9. 怎样设计解开数独游戏

    很早之前大概是2014年的时候,我用WPF就是C#啦,写了一个数独游戏,那时之所以有这个想法,主要还是因为更早之前玩数独游戏时基本没有把题目解出,有点小受伤,但本葛葛毕竟是程序员啊,我解不出,可以用程 ...

  10. 数独游戏前端学习笔记及后续解数独方法

    学习于默课网学习视频的整理笔记 视频老师分享代码库 基于我本地已经安装了nmp/node所以只添加了yarn 安装yarn: npm install -g yarn 安装成功后,查看版本号yarn - ...

最新文章

  1. TVM性能评估分析(三)
  2. 基于IndexedDB实现简单文件系统
  3. 如何自己写一个公用的NPM包
  4. sql Server snapshots
  5. 如何用SAP编制现金流量表
  6. 项目管理过程中的一些注意事项
  7. Python Django related_name属性使用示例
  8. Java HashSet和HashMap源码剖析
  9. 《软件工程(第4版?修订版)》—第1章1.5节 系统的方法
  10. 解决python中html 代码被注释掉 依旧被解释导致报错ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx)
  11. 知识图谱论文阅读(二十一)【SIGIR2019】NGCF: Neural Graph Collaborative Filtering
  12. android 带箭头的框,带有工具提示箭头的Android PopupWindow
  13. offer收割者!Alibaba内部独家MySQL优化宝典横空出世,再也不用担心被面试官拦路了
  14. 计算机蓝屏了 怎么维修,电脑蓝屏怎么解决
  15. Geany的所有主题文件
  16. java atm柜机_java课程设计-ATM柜机模拟程序.doc
  17. CentOS7.x配置三线策略路由
  18. 不属于c语言程序运算符,下面属于C语言关系运算符的是:( ) (A) (B) (C) =! (D) = - 试题答案网问答...
  19. 加油站会员管理系统源码php_一对一直播源码的开发语音与操作模式分析讲解_源码吧...
  20. Js放在head和body中的区别

热门文章

  1. ECCV 2020 目标检测论文大盘点(49篇论文)
  2. 医院信息化系统大全?
  3. 你想成为什么级别的程序员?
  4. notempty注解属于哪个依赖_@NotEmpty、@NotNull、@NotBlank注解解析
  5. vs2013设置winp#cap开发环境
  6. ai交互剧本_AI可以制作音乐,剧本和诗歌。 电影呢?
  7. 天行健---宇宙的生与死
  8. 外贸常用术语_对外贸易常用的贸易术语有几种?分别是,,,
  9. 关于连接数据库出现Connection failed: Access denied for user ‘root‘@‘localhost‘ (using password: YES)解决方案(最有用)
  10. PDP激活被拒绝原因码表