51,410
社区成员
发帖
与我相关
我的任务
分享
package sudumachine;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Sudoproduce {
int [][]Sudo_ques=new int [9][9];
boolean flag=false; //用于堆栈返回
public void Fill_ques(int index) { //进行填数
if(flag) {
return;
}
int col,row;
row=index/9;
col=index%9;
if(index==81) {
flag=true;
return;
}
if(Sudo_ques[row][col]==0) {
for(int ii=1;ii<=9;) {
List<Integer> list = new ArrayList<Integer>(9);
Random random = new Random();
int fill_num = random.nextInt(9) + 1;
//当list中包含数字i时,在重新生成1-9的数字
while (list.contains(fill_num))
fill_num= random.nextInt(9) + 1;
list.add(fill_num);
ii++;
Sudo_ques[row][col] = fill_num;
if (check(index,fill_num)) {
Fill_ques(index+1); //进入递归
}
}
Sudo_ques[row][col]=0;
}
else {
Fill_ques(index+1);
}
}
public boolean check(int index,int fill_num) {
int col,row,row_three,col_three;
row=index/9;col=index%9;
row_three=row/3*3;
col_three=col/3*3;
//行循环
for(int i=0;i<9;i++) {
if(Sudo_ques[row][i]==fill_num&&i!=col)
return false;
}
//列循环
for(int j=0;j<9;j++) {
if(Sudo_ques[j][col]==fill_num&&j!=row)
return false;
}
//三角方格
for(int i=row_three;i<row_three+3;i++)
for(int j=col_three;j<col_three+3;j++)
if(Sudo_ques[i][j]==fill_num&&i!=row&&j!=col)
return false;
return true;
}
public void Diaplay() {
for(int i=0;i<9;i++) {
for(int j=0;j<9;j++)
System.out.print(Sudo_ques[i][j]+" ");
System.out.println();
}
}
public static void main(String[] args) {
Sudoproduce newplay=new Sudoproduce();
newplay.Fill_ques(0);
newplay.Diaplay();
}
}