【华为】数独
来源:互联网 发布:js贪吃蛇 编辑:程序博客网 时间:2024/05/22 11:58
题目:数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。
输入:输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的,答案唯一。
输出:输出九行,每行九个空格隔开的数字,为解出的答案。
注意:这一题是用深搜处理唯一解的问题,注意深搜时,找到立马结束的处理方法。
代码:
#include <vector>#include <iostream>using namespace std;bool isValid(vector<vector<int>> &board,int x,int y,int k){ for(int j=0;j<9;++j) if(board[x][j]==k) return false; for(int i=0;i<9;++i) if(board[i][y]==k) return false; for(int i=0;i<3;++i){ for(int j=0;j<3;++j) if(board[x/3*3+i][y/3*3+j]==k) return false; } return true;}bool dfs(vector<vector<int>> &board){ for(int i=0;i<9;++i){ for(int j=0;j<9;++j){ if(board[i][j]==0){ for(int k=1;k<=9;++k){ if(isValid(board,i,j,k)){ board[i][j]=k; if(dfs(board)) return true; //******* board[i][j]=0; } } return false; } } } return true;}int main(){ vector<vector<int>> board(9,vector<int>(9,0)); for(int i=0;i<9;++i) for(int j=0;j<9;++j) cin>>board[i][j]; dfs(board); for(int i=0;i<9;++i){ for(int j=0;j<9;++j){ if(j>0) cout<<" "; cout<<board[i][j]; } cout<<endl; } return 0;}
阅读全文
0 0
- 【华为】数独
- 华为,数独
- 华为机试---数独
- 华为Oj----Sudoku(数独)
- 牛客网---2016---华为数独
- 华为编程大赛中的“数独”问题
- 华为OJ(数独游戏-Sudoku)
- 面试题-华为(16年)-数独-7
- 华为2016研发工程师编程题3数独
- 数独
- 数独
- 数独
- 数独
- 数独
- 数独
- 数独
- 数独
- 数独
- 3.LabVIEW_USB_I2C_AM2321B
- AutoIt:Windows自动化测试
- scala map排序
- js的包装对象
- (7)约瑟夫问题
- 【华为】数独
- php mcrypt加密实例
- LeetCode: 476. Number Complement
- 万能地图下载器矢量标注功能特性
- Java语言基础{Java_se(02)}-字面量和常量-变量的基本定义和使用-Java表达式-数据类型和分类-基本数据类型的转换-算数运算符-赋值运算符-比较运算符-三元运算符-逻辑运算符
- Effective Java(一)—— 创建和销毁对象
- 创建第一个线程
- Java设计模式-代理模式
- TP分页类优化 css代码