导航菜单
首页 >  三星算法考试真题  > 三星研究院(南京)机试练习(二)搜索经典题

三星研究院(南京)机试练习(二)搜索经典题

2676 -- Sudoku

题意:给定一个九行九列矩阵(大九宫格),让你填充矩阵里面的元素,要求:

1.每一行,每一列,每个小九宫格(图片画粗的地方就是)不能包含相同元素

2.每一行,每一列,每个小九宫格均会完整出现1-9的数字

思路:DFS回溯填充数字,一行一行填充,当填到第十行说明填充成功,每填充一个位置,都需要用“istrue”函数验证一下该位置是否合法(需要判断每一行,每一列,每个小九宫格是否包含了相同元素),唯一难点就是判断当前填充位置的小九宫格起点位置

获取小九宫格起点位置:横坐标/3*3就能获得小九宫格左上角横坐标,纵坐标/3*3就能获得小九宫格左上角纵坐标(自己推算一遍就知道了)

#include#includeusing namespace std;char maze[20][20];bool istrue(int x,int y,char now){//行for (int i = 0; i < 9; ++i){char temp = maze[x][i] ;if (temp == now)return 0;}//列for (int i = 0; i t;while (t--){flag = 0;for (int i = 0; i < 9; ++i){for (int j = 0; j < 9; ++j)cin>> maze[i][j];}dfs(0,0);for (int i = 0; i < 9; ++i){for (int j = 0; j < 9; ++j)cout maze[i][j];}dfs(0,0);for (int i = 0; i < 9; ++i){for (int j = 0; j < 9; ++j)cout

相关推荐: