Let Sudoku Rotate
题意
数独,有一个16*16的数独 数独内的数字从0~E,一开始数独是完美的,可是有个人逆时针旋转了数独中的某几块(4x4),导致数独不完美了,给你这个旋转后的数独,要求还原他至少要再旋转几步?
思路
dfs+剪枝。
写出下列几个操作:
- 顺时针旋转4*4的方块;
- 判断每行的总和是否都为120;
- 判断每行和每列的元素是否都不重复;
- dfs,由于一行块有4个分块,因此四重循环,同一个x分别对应y的起始:0,4,8,12,循环+1表示旋转次数+1,如果在2、3的判断中都满足这写要求,说明可以进行下一个x+4(起始行)块的旋转操作dfs,step+本次旋转的操作(i,j,k,l四重循环),要是不满足还是要继续。当x==16或者是step比当前已知的最小ans要大的时候都可以return。
看!代码
1 |
|