【java】java数独生成递归求解!!!!!

liouozm 2017-12-20 11:25:06
想做一个数独生成的程序。
但是运行出来全是零。感觉在递归上面有些问题,但是debug里面实在找不到~求帮忙

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();
}
}

...全文
180 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liouozm 2017-12-20
  • 打赏
  • 举报
回复
想到了 因为回溯法 会让递归回到循环中,最终会成为默认数组,全为0.所以在 index==81时,将数组赋值给另一个数组。 我还有一个不明白的地方 就是设置i if(Sudo_ques[row][col]==0) 这个原因是什么??
liouozm 2017-12-20
  • 打赏
  • 举报
回复
upupupupupupupupupupupu

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧