使用回溯的数独求解器

2024-03-13

我最近一直在研究回溯数独求解算法,目前我想问一下我应该如何将我的solve()方法从void更改为boolean。

我正在使用一个非常简单的回溯算法,它目前工作正常,但我宁愿有一个布尔值而不是一个空值,因为有一个打印堆栈不是很好......

Thanks!

public class Backtracking{


 static int backtrack = 0;


 //check if valid in row
protected static boolean validInRow(int row, int value)
{
   for( int col = 0; col < 9; col++ )
     if( board[row][col] == value )
         return false ;

  return true ;
}

  //check if valid in column
protected static boolean validInCol(int col, int value)
{
    for( int row = 0; row < 9; row++ )
     if( board[row][col] == value )
        return false ;

  return true ;
 }

 //check if valid in 3*3
protected static boolean validInBlock(int row, int col, int value)
{
  row = (row / 3) * 3 ;
    col = (col / 3) * 3 ;

   for( int r = 0; r < 3; r++ )
      for( int c = 0; c < 3; c++ )
       if( board[row+r][col+c] == value )
         return false ;

   return true ;
 }




      //call other methods
public void solve(int row, int col) throws Exception
{

   if(row > 8)
     throw new Exception("Solution found") ;
  else
  {

     while(board[row][col] != 0)
     {
        if( ++col > 8 )
        {
           col = 0 ;
           row++ ;


           if( row > 8 )
              throw new Exception( "Solution found" ) ;
        }
     }


     for(int value = 1; value < 10; value++)
     {
        if(validInRow(row,value) && validInCol(col,value) && validInBlock(row,col,value))
        {
           board[row][col] = value;
           new PrintEvent(board);



           if( col < 8 )
              solve(row, col + 1);
           else
              solve(row + 1, 0);

           backtrack++;
         }
      }


      board[row][col] = 0;

      }
   }
 }

嗯,你可以catch避免堆栈跟踪的异常,但这仍然不是很漂亮。将返回类型更改为后可以做什么boolean is:

       if( col < 8 ) {
          if (solve(row, col + 1)) {
              return true;
          }
       } else {
          if (solve(row + 1, 0)) {
              return true;
          }
       }

然后当然,改变throw声明给return true;.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用回溯的数独求解器 的相关文章

  • 在java中轮询Http服务器(重复发送http get请求)

    当对其进行 REST 调用时 我的 Web 服务器会发送一些信息 我想不断轮询该服务器 间隔5秒后重复发送HTTP GET请求 以检查返回的信息是否有任何变化 做到这一点最有效的方法是什么 您能提供一些代码示例吗 请注意 我只想开发客户端代
  • 按下按钮并在java中的新窗口中打开文件

    我创建了一个 JFrame 并放置了一个文本字段和按钮 在文本字段中我放置了从文本文件读取的名称 我知道我想单击按钮并打开一个已知窗口 我想在其中放置名称 其他信息来自同一个文件 这是我的代码 这是我的主框架 package Fronten
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • eclipse行号状态行贡献项是如何实现的?

    我需要更新状态行编辑器特定的信息 我已经有了自己的实现 但我想看看 eclipse 贡献项是如何实现的 它显示状态行中的行号 列位置 谁能指点一下 哪里可以找到源代码 提前致谢 亚历克斯 G 我一直在研究它 它非常复杂 我不确定我是否了解完
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • 如何在 Java 中向时间戳添加/减去时区偏移量?

    我正在使用 JDK 8 并且玩过ZonedDateTime and Timestamp很多 但我仍然无法解决我面临的问题 假设我得到了格式化的Timestamp在格林威治标准时间 UTC 我的服务器位于某处 假设它设置为Asia Calcu
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • 提供节点名或服务名,或未知 Java

    最近我尝试运行我的 Java 项目 每当我运行它并将其打开到我得到的服务器地址时 Unable to determine host name java net UnknownHostException Caused by java net
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 如何在字段值无效的情况下更改 Struts2 验证错误消息?

    我在 Web 表单上使用 Struts2 验证 如果字段假设为整数或日期 则
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho

随机推荐

  • EWS - 如何找到所有未完成的任务?

    我正在使用 Exchange Web 服务尝试获取所有未完成的 Outlook 任务的列表 我有一个 ExchangeService 实例 并尝试查找所有未完成的任务 如下所示 SearchFilter searchFilter new S
  • 数据流/apache beam 窗口中字节数的触发窗口

    我有一个简单的工作 将数据从 pub sub 移动到 gcs pub sub 主题是一个共享主题 具有许多不同大小的不同消息类型 我希望结果在 GCS 中相应地垂直分区 架构 版本 年 月 日 该父键下应该是当天的一组文件 并且文件的大小应
  • 加载后如何获取iframe主体?

    我需要在 iframe 加载后获取 iframe 主体 document getElementById frame contentDocument body假设 iframe 的 ID 是 将以纯 JavaScript 形式提供给您fram
  • 如何通过友好名称打开串口?

    友好名称 显示在 设备管理器 中 端口 COM 和 LPT 下的名称 编辑 下面提供了两个解决方案 一个使用 WMI 另一个使用 SetupAPI 贴出今晚的代码 供大家欣赏 public class SetupDiWrap static
  • 如何为两个Windows窗体应用程序共享一个IsolatedStorage?

    我在一个解决方案中有两个 Windows 窗体应用程序和库 Library类可以在IsolatedStorage中创建新的文件夹和文件 并列出IsolatedStorage中的所有文件和文件夹 第一个应用程序使用库类创建新文件夹 文件 我希
  • 如何在android中将UTC时间戳转换为设备本地时间

    我需要将从服务器获取的 UTC 时间戳转换为本地设备时间 目前 我的时间有 5 小时的差异 例如 当我发布到服务器时 发布时间显示为 5 小时前而不是一秒前 我该如何解决这个问题 下面是我所做的代码 long timestamp curso
  • 在 Spring Security 表单登录页面中获取原始请求 url

    我在我的 spring 安全配置文件中声明了以下内容 http www springframework org schema security spring security 2 0 1 xsd http www springframewo
  • 如何获取TextView的文字颜色?

    在给定的代码中 lbl 0 getTextColor 给出错误 但我不知道如何获取 java 文件中 textview 的文本颜色 请帮助我 public void angry View v if lbl 0 getTextColor Co
  • android中的权限请求代码

    请帮助我获取权限 WRITE EXTERNAL STORAGE 和 WRITE SETTINGS 的请求代码 另请让我知道请求代码的来源 一个简单的演示 Here thisActivity is the current activity i
  • Ember 数据 1.0.0:与每种类型的适配器和序列化器混淆

    我正在从 Ember 数据 0 13 迁移到 1 0 0 beta 根据文档https github com emberjs data blob master TRANSITION md https github com emberjs d
  • MS Access 插入不重复

    微软访问2003 表主 手机号文本 255 名字文本 255 姓氏文本 255 地址文本 255 表温度 手机编号文本 255 名字文本 255 姓氏文本 255 地址文本 255 主要有100条记录 临时有 30 条记录 两个表都有 10
  • 发送图像并使用 json 返回它?

    我试图使用 json 将图像发送到 php 中的 web 服务 但客户端 cnt 读取图像 当我把它还回来的时候
  • 在 Java 中创建不依赖 if-else 的工厂方法

    目前我有一个方法 它充当基于给定字符串的工厂 例如 public Animal createAnimal String action if action equals Meow return new Cat else if action e
  • 如何让CSS网格项占用剩余空间?

    我有一张用 CSS 网格布局构建的卡片 左侧可能有一个图像 右上角有一些文本 右下角可能有一个按钮或链接 在下面的代码中 如何使绿色区域占用尽可能多的空间 同时使蓝色区域占用尽可能少的空间 绿色应将蓝色区域尽可能向下推 https jsfi
  • 如何使用 Spring AsyncResult 和 Future Return

    我有一个公共接口 Synchronous 它暴露给多个服务层类 它的目的是根据传递的 id 查找对象图 执行一些业务逻辑 然后将其传递给 Spring 异步方法 Asynchronous doWork 来完成其余的任务 我正在尝试使用 Sp
  • 在 React 中如何设置文档标题?

    我想为我的 React 应用程序设置文档标题 在浏览器标题栏中 我尝试过使用反应文档标题 https github com gaearon react document title 似乎已经过时 和设置document title in t
  • 在尝试发送短信之前检查 Android 中的网络覆盖范围

    我想为 Android 智能手机创建一个应用程序来检查手机是否处于飞行模式 如果是 应用程序会使手机退出飞行模式 并检查是否有任何网络连接可以发送短信 当我说网络连接时 我指的是发送短信的手机网络覆盖范围 我不想检查互联网连接 如果有网络连
  • WPF DataGrid 网格线在另存为 PDF 时不可见

    我正在使用 DataGrid 来表示 WPF 应用程序中的一些数据 在我使用 PDFSharp 将具有 DataGrid 的特定 WPF 窗口保存到 PDF 的功能中 我遇到一个问题 即当以较小的查看百分比查看保存的 PDF 时 DataG
  • 我的 Rails 和 Cocoa 应用程序之间的 SHA1 哈希值不匹配

    我有一个 Cocoa 应用程序将一些数据以及该数据的 SHA1 哈希值发送到 Rails 应用程序 该应用程序验证数据和哈希值是否匹配 但它们不匹配 可以肯定的是 我已经记录了在 Rails 和 Cocoa 端散列到控制台的数据的十六进制版
  • 使用回溯的数独求解器

    我最近一直在研究回溯数独求解算法 目前我想问一下我应该如何将我的solve 方法从void更改为boolean 我正在使用一个非常简单的回溯算法 它目前工作正常 但我宁愿有一个布尔值而不是一个空值 因为有一个打印堆栈不是很好 Thanks