想问下这个方法的执行流程?谢谢大神指导

问题描述

想问下这个方法的执行流程?谢谢大神指导

private boolean isValid(int[][] game, int index, int[] numberOfSolutions) {
if (index > 80)
return ++numberOfSolutions[0] == 1;

    int x = index % 9;
    int y = index / 9;

    if (game[y][x] == 0) {
        List<Integer> numbers = new ArrayList<Integer>();
        for (int i = 1; i <= 9; i++)
            numbers.add(i);

        while (numbers.size() > 0) {
            int number = getNextPossibleNumber(game, x, y, numbers);
            if (number == -1)
                break;
            game[y][x] = number;

            if (!isValid(game, index + 1, numberOfSolutions)) {
                game[y][x] = 0;
                return false;
            }
            game[y][x] = 0;
        }
    } else if (!isValid(game, index + 1, numberOfSolutions))
        return false;

    return true;
}

解决方案

 private boolean isValid(int[][] game, int index, int[] numberOfSolutions) {
if (index > 80)
return ++numberOfSolutions[0] == 1;//如果大于80,先numberOfSolutions[0] 加1后与1比较,返回布尔值
    int x = index % 9;//如果不大于80,从这里开始执行
    int y = index / 9;

    if (game[y][x] == 0) {
        List<Integer> numbers = new ArrayList<Integer>();
        for (int i = 1; i <= 9; i++)
            numbers.add(i);

        while (numbers.size() > 0) {
            int number = getNextPossibleNumber(game, x, y, numbers);
            if (number == -1)
                break;
            game[y][x] = number;

            if (!isValid(game, index + 1, numberOfSolutions)) {
                game[y][x] = 0;
                return false;
            }
            game[y][x] = 0;
        }
    } else if (!isValid(game, index + 1, numberOfSolutions))
        return false;

    return true;
}

解决方案二:

9x9方格,递归检测,每次index+1, 相当于先行后列的顺序访问。跳出递归的条件有:
1. index>80,代表所有方格都检查完了。根据numberOfSolutions[0]返回true或者false
2. number == -1 break出while循环了。这个循环外是返回true的。
3. isValid(index+1) 递归检查下一个格子。

只能说这么多了。
自己慢慢琢磨。

时间: 2024-09-29 05:33:16

想问下这个方法的执行流程?谢谢大神指导的相关文章

c-指针数组两种排序方法结果大相径庭,求大神指导

问题描述 指针数组两种排序方法结果大相径庭,求大神指导 #include #include int main() { void rankArr(char *pr[]); char *p[]={"china","japan","tokyo","pairs","narry"}; int i; for(i=0;i printf("%sn",p[i]); rankArr(p); for(i=0;

android recyclerview一行显示一列,下一行显示三列 ,求大神指导这个怎么写???

问题描述 android recyclerview一行显示一列,下一行显示三列 ,求大神指导这个怎么写??? 如题~~~~想了很久 ,没有思路,求大神指导~~~~~~~~!! 解决方案 这个是布局问题,做个判断就可以了

想读sql中一个表里所有记录 为什么只返回各列列名和第一列记录 其他列不返回结果 小白一枚 代码如下 求大神指导

问题描述 代码如下有其他方法和源码最好求大神指导Connectionconnection=null;PreparedStatementps=null;ResultSetMetaDatarsmd=null;ResultSetrs=null;try{Class.forName("com.mysql.jdbc.Driver");connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/coinfo&quo

各位高手我想问下。如何实现定时重新启动WINDOWS服务

问题描述 各位高手我想问下.如何实现定时重新启动WINDOWS服务!谢谢各位了! 解决方案 解决方案二:可以使用线程休眠和启动的方法来达到定时启动的功能.下面是我写的一个定时导数据的一个服务,就是用得线程休眠的方法.usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Diagnostics;usingSystem.ServiceProcess;usi

返回值 异常-想问下java返回值的问题,可能有点白目大家帮帮忙

问题描述 想问下java返回值的问题,可能有点白目大家帮帮忙 private String getBookByName(String[] books){ System.out.println("请输入书名:"); book=input.next(); for(int i=0;i<books.length;i++){ if(book.equals(books[i])){ return books[i]; }else{ return null; } } 之前没写else提示我没返回值

想问下list泛型取值问题

问题描述 我想问下如果btsList集合里面的项如果有等于str这个字符串的,就添加到我定义的datatable.fr3_table.Rows.Add(btsList)这个行不通,应该怎么写?我设断点调试的时候,btslist集合的值都是对的.就是不知道怎么赋值到我Datatableforeach(MatchminmcTwo){MatchCollectionmcSn=reg.Matches(m.ToString());stringstr=Regex.Replace(mcSn[0].Value,"

数据库-写网站使用pageObject模式,有几个问题想问下大家

问题描述 写网站使用pageObject模式,有几个问题想问下大家 写网站使用pageObject模式,想问下它可以实现把数据库里面的某个字段的所有制相加么? 例如数据库表里面有账户余额字段,可以实现把所有余额相加么?用的是spring Mvc框架.谢谢大神! 解决方案 先临时变量修改再写入 解决方案二: 使用sum方法就可以实现相加了.

http协议-想问下post请求中的param是否会被压缩

问题描述 想问下post请求中的param是否会被压缩 post请求时param参数使用流文件读取后乱码,怀疑是否是被压缩了,该如何解析. 解决方案 用httpwatch或者fiddler看下,一般不会压缩. 解决方案二: request.getParameter(arg0) 获取,不存在压缩. 解决方案三: 问下一楼的同学,这个方法我用了,但是读取出来的内容是乱码. 解决方案四: 问下一楼的同学,这个方法我用了,但是读取出来的内容是乱码. 解决方案五: 问下一楼的同学,这个方法我用了,但是读取

java-想将数据库的数据调入容器中但显示空指针。所以想问下该怎么解决

问题描述 想将数据库的数据调入容器中但显示空指针.所以想问下该怎么解决 public class Wenben extends JFrame implements TableModelListener{ JTable table; Vectorhang; Vector lie;//fang 4ge Vector h1; //数据调用 public void dy(){ lie.add("ID"); lie.add("name"); lie.add("tim