Lingo编写数独求解器

时间: 2024-05-07 17:19:50 浏览: 9
好的,以下是一个简单的 Lingo 程序,可以解数独: ``` -- 数独谜题(0 表示空格) puzzle = [[5, 0, 0, 0, 0, 0, 6, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2], [0, 1, 9, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]] -- 检查行是否合法 function check_row(puzzle, row, num) for i = 1 to 9 do if puzzle[row][i] = num then return false end if end for return true end -- 检查列是否合法 function check_col(puzzle, col, num) for i = 1 to 9 do if puzzle[i][col] = num then return false end if end for return true end -- 检查九宫格是否合法 function check_box(puzzle, row, col, num) box_row = int((row - 1) / 3) * 3 + 1 box_col = int((col - 1) / 3) * 3 + 1 for i = box_row to box_row + 2 do for j = box_col to box_col + 2 do if puzzle[i][j] = num then return false end if end for end for return true end -- 检查是否可以填入数字 function can_place(puzzle, row, col, num) return check_row(puzzle, row, num) and check_col(puzzle, col, num) and check_box(puzzle, row, col, num) end -- 查找下一个空格 function find_empty(puzzle) for i = 1 to 9 do for j = 1 to 9 do if puzzle[i][j] = 0 then return i, j end if end for end for return 0, 0 end -- 递归求解数独 function solve(puzzle) row, col = find_empty(puzzle) if row = 0 and col = 0 then return true end if for num = 1 to 9 do if can_place(puzzle, row, col, num) then puzzle[row][col] = num if solve(puzzle) then return true end if puzzle[row][col] = 0 end if end for return false end -- 显示数独谜题和解法 on mouseUp put "Puzzle:" && cr after msg repeat with i = 1 to 9 put puzzle[i] after msg put cr after msg end repeat put cr & "Solution:" & cr after msg solve(puzzle) repeat with i = 1 to 9 put puzzle[i] after msg put cr after msg end repeat end mouseUp ``` 程序中,首先定义了一个数独谜题(0 表示空格)。然后定义了检查行、列和九宫格是否合法的三个函数,以及检查是否可以填入数字的函数、查找下一个空格的函数和递归求解数独的函数。最后在 `on mouseUp` 事件中调用这些函数,显示数独谜题和解法。 运行程序后,点击鼠标即可看到数独谜题和解法。

相关推荐

最新推荐

recommend-type

数独模型LINGO求解程序

里面是基于LINGO的数独游戏解答程序以及其讲解。在对数学建模上面是一种创新
recommend-type

城市配送TSP问题的LINGO求解

针对当前城市配送对象呈现多频次、小批量的特点,配送路线的合理安排问题日益突出,为了优化配送路线,建立了城市配送TSP问题的数学模型,并用LINGO软件进行编程,提出了一种通用的TSP的快速求解方法,通过实例验证...
recommend-type

基于LINGO的优化问题动态规划法求解

lingo是求解最优问题的有效软件,不仅可以求一般的线性规划和非线性规划,还可以求无目标函数的动态规划问题,该论文给出了求解代码!
recommend-type

LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。

LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。
recommend-type

Lingo基本用法总结

LINGO是用来求解线性和非线性优化问题的简易工具。Lingo免费版可以支持30个未知数,lingo破解版可以支持几万个未知数、几万个约束条件。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。