面试题-华为(16年)-数独-7
2017-02-23 19:23
375 查看
这是从牛客网上扒下来的面试题,题目有点难,我没有做出来,下面的答案是从参考答案里扒下来的,等以后有时间再慢慢看(希望以后会有时间,哈哈)。
问题描述
数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。参考代码
#include <iostream> #include <vector> #include <fstream> using namespace std; void print_sudoku(vector<vector<int> > &matrix){ ofstream fout("text.txt",ofstream::app); for(int i=0;i<9;++i){ for(int j= 0;j<9;++j){ fout<<matrix[i][j]; if(j!=8) fout<<" "; } fout<<endl; } fout<<"***************************"<<endl; } void fill_sudoku(vector<vector<int> > &matrix,vector<pair<int,int> > &blank,int n){ if(n==blank.size()){ print_sudoku(matrix);//print all the possibilities return; } vector<bool> flags(9,false); int x=blank .first,y=blank .second; for(int i=0;i<9;++i){//row and column renouncement if(matrix[x][i]!=0) flags[matrix[x][i]-1]=true; if(matrix[i][y]!=0) flags[matrix[i][y]-1]=true; } int a[9][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1},{0,0}}; int m=x/3,k=y/3; m=m*3+1;k=k*3+1; for(int i=0;i<9;++i){//square renouncement int temp=matrix[m+a[i][0]][k+a[i][1]]; if(temp!=0) flags[temp-1]=true; } for(int i=1;i<=9;++i){ if(!flags[i-1]){ matrix[x][y]=i;//test each of the candidates fill_sudoku(matrix,blank,n+1);//iteration matrix[x][y]=0; } } } int main(){ vector<vector<int> > matrix(9,vector<int>(9)); vector<pair<int,int> > blank; for(int i=0;i<9;++i) for(int j=0;j<9;++j){ cin>>matrix[i][j]; if(matrix[i][j]==0) blank.push_back(make_pair(i,j)); } fill_sudoku(matrix,blank,0); return 0; }
相关文章推荐
- 面试题-华为(16年)-约瑟夫环:每隔两个数删掉一个数...-4
- 面试题-华为(16年)-字符集合去重-5
- 华为面试题解析 - 06
- 应聘华为 16道经典面试题及回答思路
- 16年华为春季实习生机试题
- 一道华为的面试题,给出当前时间计算下一秒的时间
- 华为--软件工程师面试题(1)
- 面试题集锦和答案收集 - 微软,谷歌,华为,阿里巴巴等
- 你需要从A地去B地,但你不知道能不能到,这时该怎么办? - Google, 谷歌,百度,baidu,阿里巴巴,alibaba,微软,华为,huawei面试题
- 华为C/C++笔试题(附答案,华为面试题系列)
- 关于华为一道面试题 ( ++a )和( a++ ) .
- 华为面试题
- java面试题--百度华为的面试题---直接贴代码了
- 一道华为面试题
- 2016年未,腾讯,百度,华为,搜狗和滴滴面试题汇总
- [置顶] 2016年未,腾讯,百度,华为,搜狗和滴滴面试题汇总
- 2016年未腾讯,百度,华为,搜狗和滴滴面试题汇总(转)
- 华为面试题:扑克牌大小 C语言源码
- 华为面试题:迷宫问题 C语言源码
- 华为面试题解析 - 02