编写一个程序,通过已填充的空格来解决数独问题。
一个数独的解法需遵循如下规则:
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
空白格用 '.' 表示。
一个数独。
答案被标成红色。
Note:
给定的数独序列只包含数字 1-9 和字符 '.' 。
你可以假设给定的数独只有唯一解。
给定数独永远是 9x9 形式的。

#include <iostream>
#include <vector>
using namespace std; bool isvalid(int i,int j,int ans,vector<vector<char>>& board)
{
for (int k = ; k < ; k++) //判断同行同列是否有重复
{
if (board[k][j] == ans) return false;
if (board[i][k] == ans) return false;
}
//算出所在的宫格块左上角位置
i=i/*;
j=j/*;
//判断宫格内是重复
for(int k=i;k<i+;k++)
for(int h=j;h<j+;h++)
{
if (board[k][h] == ans) return false;
}
return true;
} bool try_ans(vector<vector<char>>& board)
{
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (board[i][j]!='.') continue;
for (char ans = ''; ans <= ''; ans++)
{
if (!isvalid(i,j,ans,board)) continue;//是否可以放入
board[i][j] = ans;
if (try_ans(board)) return true;//是否放完了
else board[i][j] = '.';
}
return false;
}
}
return true;//最后每个地方都放入了数字,返回真
} void solveSudoku(vector<vector<char>>& board)
{
try_ans(board);
} int main() {
std::cout << "Hello, World!" << std::endl;
return ;
}

最新文章

  1. XML序列化及反序列化
  2. springmvc接收JSON类型的数据
  3. downsampling and upsampling【转】
  4. 东大OJ-Max Area
  5. EETOP中关于Gm仿真的一些帖子的总结
  6. js 获取随机数
  7. Oracle中INT、FLOAT、NUMBER区别
  8. SaaS系列介绍之十五: SaaS知识重用
  9. Unity3D 之3D游戏SD快打 3D游戏基础入门开发全(1)
  10. Permutations 解答
  11. 7. Shell 脚本编写
  12. View处理常用方法封装
  13. EasyUI中datagrid的基本用法
  14. VS2012中C++,#include无法打开自己所写的头文件(.h)
  15. HttpClient当HTTP连接的时候出现大量CLOSE_WAIT连接(转)
  16. Python全栈开发之路 【第八篇】:面向对象编程设计与开发(2)
  17. javascript 最全面的数组操作合集
  18. QT5 解决QSqlDatabase: QMYSQL driver not loaded 问题
  19. ONVIF协议学习笔记
  20. C++之C++的词法单位

热门文章

  1. 原生js制作标题与内容保持4行的效果
  2. android中的内部存储与外部存储
  3. 任务十五:零基础JavaScript编码(三)
  4. 《effective c++》读书笔记(上)
  5. python三次输入错误验证登录
  6. js 巧妙去除数组中的重复项
  7. Python初学者第六天 列表操作练习
  8. Jquery学习---一键上传
  9. MyEcplise使用---使用 MyEclipse 反转引擎生成数据库
  10. Heka配置讲解