博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sudoku Solver
阅读量:4692 次
发布时间:2019-06-09

本文共 1127 字,大约阅读时间需要 3 分钟。

A: 回溯法解决,和八皇后一个思路。

用三个二维数组标记数字在行,列,block是否出现过。

vector
> row; vector
> col; vector
> block; void solveSudoku(vector
> &board) { // Start typing your C/C++ solution below // DO NOT write int main() function row.clear(); col.clear(); block.clear(); row.resize(9,vector
(9,false)); col.resize(9,vector
(9,false)); block.resize(9,vector
(9,false)); for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { if(board[i][j]=='.') continue; int num = board[i][j]-'1'; row[i][num] = col[j][num] = block[(i/3)*3+j/3][num] = true; } } dfs(0,board); } bool dfs(int pos,vector
>& board) { while(pos<81&&board[pos/9][pos%9]!='.') { pos++; } if(pos==81) return true; int i = pos/9,j=pos%9; for(int num=0;num<9;num++) { if(!row[i][num]&&!col[j][num]&&!block[(i/3)*3+j/3][num]) { row[i][num] = col[j][num] = block[(i/3)*3+j/3][num] = true; board[i][j] = num+'1'; if(dfs(pos+1,board)) return true; board[i][j] = '.'; row[i][num] = col[j][num] = block[(i/3)*3+j/3][num] = false; } } return false; }

  

转载于:https://www.cnblogs.com/summer-zhou/p/3347183.html

你可能感兴趣的文章
BZOJ-3207 花神的嘲讽计划Ⅰ
查看>>
BZOJ-1069 [SCOI2007]最大土地面积
查看>>
进程与线程的一个简单解释【摘】
查看>>
COJ976 WZJ的数据结构(负二十四)
查看>>
slid.es – 创建在线幻灯片和演示文稿的最佳途径
查看>>
2016年6月份那些最实用的 jQuery 插件专辑
查看>>
安卓截图
查看>>
如何在数据库中使用索引
查看>>
ring0
查看>>
windows虚拟机下 安装docker 踩过的坑
查看>>
使用 CXF 做 webservice 简单例子
查看>>
2017-2018-1 20155339 《信息安全系统设计基础》第8周学习总结
查看>>
socket.io 消息发送
查看>>
C# 两个datatable中的数据快速比较返回交集或差集
查看>>
关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
查看>>
一些有趣的代码
查看>>
从RTP到ORTP
查看>>
单文档切换OpenGL视图
查看>>
抽象类和接口的区别
查看>>
JS生成随机的字母数字组合的字符串
查看>>