S1:int array [][] //最原始的数组,没有填入的数字为0
S2:public void backTrace(int i ,int j)//i表示行,j表示列
S3:if(i = 8 and j == 9) then return//这里的i为8代表着已经到达最后一行(0-8)为9行,j为9代表第8列已经执行完毕后j++,根据函数的if判断j为9,没有执行函数后面的操作,直接退出
S4:if(j==9)
S5: i++//当遍历到最后一列,需要换行填入数据
S6: j = 0//将列数置为0,从开头计算
S7:if(array[i][i]) == 0)//作出判断,9x9数组中的该元素有没有准备填入的该元素
S8 for(k = 1 to 9)//这里代表填入的数字从1到9,分别做尝试
S9: if(check(i,j,num)//如果满足小的九宫格没有此数字,和各行各列
S10 array [i][j] = num//将该数字赋值到array[i][j]中,代表选中
S11 backTrace(i,j+1)//进行下一个空格的查找
S12 array [i][j] = 0//将array[i][j]置为0为了使回溯后不会受到之前赋值的影响
S13 else
S14 backTrace(i,j+1)//进入下一个空格的查找
S15public boolean check(int row ,int line,int num)
//row表示行,line表示列,num代表要填入的数
S16 for(i =0 to 9)
S17 if(array[row][i] = num or array[i][line] = num )
//检验要填入数的那行那列不能与准备填入的数字相同
S18 return false//不符合行和列的不存在该数字
S19 temprow = row/3 //这里是为了找到对应的九宫格,例如你要求的行列数分别为7,5
得到的temprow为2,templine为1,也就是属于9个小的九宫格找那个的第二行第一列
S20 templine = line/3
S21 for(i =0 to 2)
S22 for(j =0 to 2)
S23 if(array[temprow*3+i][templine*3+j] == num)
S24 then return false//不符合九宫格条件
S25 return true//上面的限制条件都不成立则返回true
数独游戏伪代码实现
猜你喜欢
转载自blog.csdn.net/weixin_44822939/article/details/106417265
今日推荐
周排行