Prolog实现的9x9数独解决方案分析

需积分: 5 0 下载量 132 浏览量 更新于2024-12-20 收藏 3KB ZIP 举报
资源摘要信息:"2020.2_G3_Logico_Sudoku" ### 知识点概述 #### 数独游戏与编程 数独是一种经典的逻辑填数字游戏,通常在一个9x9的网格中进行,该网格又进一步划分为9个3x3的小宫格。玩家的目标是根据已有的数字提示,通过逻辑推理填充剩余的空格,使得每一行、每一列以及每一个小宫格中的数字都不重复,范围从1至9。 #### 学科介绍 本文档标题中的“FGA0210-PARADIGMAS DE PROGRAMAÇÃO-T01”表示这是一个程序设计范式课程的教材或资料。这门课程可能旨在教授学生不同的编程方法或范式,并可能通过项目或实践来加深理解。课程编号后跟随的是组号“03”,表明这是第3个学习小组。 #### 学生信息 文档中提到了两名学生的信息:若昂·加布里埃尔·安特尼斯(JoãoGabriel Antunes),学号17/0013651;穆里洛·洛伊奥拉·丹塔斯,学号17/0163571。他们可能是这门课程的学生,并参与了数独项目。 #### 项目描述 文档描述了一个9x9数独解决方案的项目。提到项目能够解决完全空白的数独问题,也能提供用于现状的解决方案,并存在。这里可能指的是一个可以解决多种数独问题的程序,无论是空格全部空白还是已有部分数字填充的情况。 #### 屏幕截图与安装说明 提到了“屏幕快照Adicione 2的界面截图”,这意味着有相关的用户界面截图展示,可能展示了数独游戏界面或者程序的运行界面。文档还提到了“安装”,但具体安装步骤和要求没有详细说明。 #### 技术栈 文档中提到了“Linguagens”,可能指的是编程语言。紧接着提到了“SWI-Prolog”,这是指的是一个广泛使用的Prolog编程语言的实现。Prolog是一种逻辑编程语言,适合进行复杂的查询、模式匹配以及自动推理等任务,非常适合处理数独这类逻辑问题。 #### Prolog编程语言 Prolog(Programming in Logic)是一种高级的、声明式的编程语言,由逻辑推理提供基础,主要用于人工智能和计算语言学领域。在Prolog中,程序员定义一系列事实和规则,而解释器则利用这些定义来回答查询(queries)。Prolog程序主要由一系列谓词(predicates)构成,谓词表示的是事实(facts)或规则(rules)。 #### 实践应用 通过“数独解决方案”的项目,可以实践Prolog编程语言的应用。学生可以通过编写Prolog代码来实现数独问题的求解,这不仅是一个学习如何使用Prolog的机会,也是一个理解逻辑编程如何处理具体问题的实例。 #### 结语 本文档指向的项目或实践,可能是一个课程的作业或小组项目,其目的是让学生通过解决实际问题来掌握编程理论。数独项目是检验学生对于Prolog以及逻辑编程理解程度的一个很好的手段,因为数独本身就是一个逻辑性强,规则明确的问题。通过编写Prolog程序来解决数独问题,学生可以学习到如何应用逻辑规则、如何实现自动推理等关键编程概念。

def __next_step(self, x, y): if not self.judge_colory: self.__history += 0 else: self.__history += 1 self.color = 1 if self.__history % 2 == 0 else 2 if self.start_ai_game: if self.ai_color == self.color: row,col = self.ai_stage(self.ai_game()[0],self.ai_game()[1]) else: col = round((x-self.__margin*2)/self.__cell_width) row = round((y-self.__margin*2)/self.__cell_width) stage_row = (y-self.__margin)-(self.__cell_width*row+self.__margin) stage_col = (x-self.__margin)-(self.__cell_width*col+self.__margin) if stage_col < stage_row: self.direct= 1 else: self.direct= 0 else: col = round((x - self.__margin * 2) / self.__cell_width) row = round((y - self.__margin * 2) / self.__cell_width) stage_row = (y - self.__margin) - (self.__cell_width * row + self.__margin) stage_col = (x - self.__margin) - (self.__cell_width * col + self.__margin) if stage_col < stage_row: self.direct = 1 else: self.direct= 0 if self.valide(row, col, self.direct): if self.__history % 4 == 0 or (self.__history + 2) % 4 == 0: self.__game_board.drew_turn(2) else: self.__game_board.drew_turn(1) self.add_logic(row, col, self.color) self.__game_board.draw_chess(row, col, self.color, self.direct) if self.judge_owner(row, col, self.color, self.direct): self.__game_board.drew_turn(self.judge_next(self.color)) for i in self.judge_owner(row, col, self.color, self.direct): x,y=self.draw_owner(i) self.__game_board.drew_owner(self.color, y, x) else: self.__game_board.drew_turn(self.color) self.judge_color(row, col, self.color, self.direct) print(self.logic_board_state) if 0 not in self.logic_board_owner: self.__game_board.pop_win(self.judge_winner())

2023-07-14 上传