数独游戏伪代码实现

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
今日推荐