| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 710 人关注过本帖
标题:Java 数独问题
只看楼主 加入收藏
ilikebei
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-5-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
Java 数独问题

import java.util.Scanner;

public class ShuduTest {
    public int[][] nums=new int[9][9];

    private boolean isFinished=false;
    //The construction function of Sudoku
    public ShuduTest(){

    }
   
    public boolean Check(int n,int i){
        //check the feasibility of the row
        for (int j=0;j<9;j++){
            if (nums[n/9][j]==i) return false;
        }
        
        //check the feasibility of the column
        for (int j=0;j<9;j++){
            if (nums[j][n%9]==i) return false;
        }
        
        //check the feasibility of the matrix
        for (int j1=n/9/3*3;j1<n/9/3*3+3;j1++)
            for (int j2=n%9/3*3;j2<n%9/3*3+3;j2++)
                if (nums[j1][j2]==i) return false;
        
        
        return true;
    }
   
   
    //Compute the items in Sudoku
    public int DFS(int n){
        
        if (n>80) {
            isFinished=true;
            return 0;
        }
        
        if (nums[n/9][n%9]!=0) DFS(n+1);
        else{ for (int i=1;i<10;i++){
                if (Check(n,i)==true){
                    nums[n/9][n%9]=i;
                    DFS(n+1);
                    if(isFinished==true) return 0;
                    
                    nums[n/9][n%9]=0;
                }
            }
        }
        
        return 0;
    }
   
    public void sovleSudoku(){
        //solve the sudoku problem
        DFS(0);
        
   
    }
   
    public static void main(String[] args){
        ShuduTest sudu=new ShuduTest();
        Scanner input=new Scanner(System.in);
        System.out.println("Please inpout the Shudu numbers:");
        for (int i=0;i<9;i++)
            for (int j=0;j<9;j++)
                sudu.nums[i][j]=input.nextInt();
        
        sudu.DFS(0);
        
        for (int i=0;i<9;i++)
            for (int j=0;j<9;j++)
                System.out.println(sudu.nums[i][j]);
        
    }

}

我是新手,这是我编写的一个数独求解测试方法,在运行过程中DFS()出现了很多问题
1,DFS()在运算过程中出现了返回异常情况,我需要递归n=80,但我调试的时候发现没有到80就结束了
2,变量nums在经过DFS()运算后没有变化
3,同样的DFS()函数在C++里面运行就没有问题,可以得到正确解

想请问一下这个问题出在哪里啊?各位牛人给看看

谢谢
搜索更多相关主题的帖子: function private public return import 
2014-11-27 11:05
Java258
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:122
专家分:561
注 册:2014-10-15
收藏
得分:20 
你debug试试也许就找到问题了!运行结果
程序代码:
Please inpout the Shudu numbers:
5
5
5
5
5
5
5
4
4
4
4
44
4
4
4
5
4
5
5
5
5
5
5
5
5
5

5
5
5
5
6
5
5
5
5
5
22
2
2
2
2
2
2
2
2
2
2
2
2
2
13
5
7
9
6
5
4
3
2
1
1
2
3
4
5
6
7
9
5
5
5



5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
4
4
4
4
44
4
4
4
5
4
5
5
5
5
5
5
5
5
5
5
5
5
5
6
5
5
5
5
5
22
2
2
2
2
2
2
2
2
2
2
2
2
2
13
5
7
9
6
5
4
3
2
1
1
2
3
4
5
6
7
9
5
5
5
5
5
5
5
5
5
5
5
5
5

虔诚请教,虚心学习……
2014-11-27 13:17
ilikebei
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-5-24
收藏
得分:0 
回复 2 楼 Java258
谢谢

我debug发现DFS()能够运算几步,并且结果正确。但是运算一会之后就函数就结束了,但并没有满足我给定的结束条件
还有你的这个算例选的不合适,应该选用数独算例,

我测试的是
1 0 0 8 3 0 0 0 2
5 7 0 0 0 1 0 0 0
0 0 0 5 0 9 0 6 4
7 0 4 0 0 8 5 9 0
0 0 3 0 1 0 4 0 0
0 5 1 4 0 0 3 0 6
3 6 0 7 0 4 0 0 0
0 0 0 6 0 0 0 7 9
8 0 0 0 5 2 0 0 3

同样的算例和函数在C++下可以解出来,所以算法应该是没有问题的
2014-11-27 14:35
快速回复:Java 数独问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015735 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved