场景:九宫格的同一行,同一列,同对角线上的数字加起来相等
实现九宫格可使用以下策略:
1、最小值永远在最上行的中间格,最大值永远在最下行的中间格。
2、最上行碰壁,下一个数填入右列最下格。
3、最右列碰壁,下一个数填入上一行最左格。
4、右上格有空就一直填下一个数;右上格有数,就将下一个数字填入上一个数的下一格。
5、右上角的下一个数,必定在其下一格;左下角的上一个数,必定在其上一格。
具体代码实现思路:
1.先定义一个一个int型的二维数组arr,并定义及初始化变量,行row=0,列col=n/2(n为二维数组的列);
定义变量x=1用于后续遍历。
2.设置九宫格第一行中间一个格子的值为1;
3.使用while循环,当x<=n*n时,进入循环并作以下判断
1)从当前数字的右上角开始填下一个数字,如果下个数字超出当前行,row=当前数组长度-1,继续向右上角填数字
2)同时列右移加1,如果列超出边界,就将其设置为0
3)判断当前格子中是否有数字,如果值为0,代表没有填过数字,此时,设置当前格子的值为目前循环的数字。
4)如果当前格子中有数字,这里就要用到回溯法,在循环的最开始记录当前的行,列。然后设置行加