泛数独 细节小证明(以后做规范,美观工作)加上:row_room=(row-1)/k*k+1 col_room类似

对下面这段代码进行功能描述:import numpy as np def is_valid_initial_grid(sudoku): # 检查是否为 9x9 网格 if sudoku.shape != (9, 9): return False # 检查每个元素是否在 0 - 9 范围内 if not np.all((sudoku >= 0) & (sudoku <= 9)): return False # 检查每行是否有重复的非零数字 for row in sudoku: non_zero = row[row != 0] if len(set(non_zero)) != len(non_zero): return False # 检查每列是否有重复的非零数字 for col in sudoku.T: non_zero = col[col != 0] if len(set(non_zero)) != len(non_zero): return False # 检查每个 3x3 子网格是否有重复的非零数字 for i in range(0, 9, 3): for j in range(0, 9, 3): sub_grid = sudoku[i:i+3, j:j+3] non_zero = sub_grid[sub_grid != 0] if len(set(non_zero)) != len(non_zero): return False return True # 辅助函数:检查在 (row, col) 位置放置数字 num 是否合法 def isValid(sudoku, row, col, num): # 检查所在行是否有重复数字 if num in sudoku[row]: return False # 检查所在列是否有重复数字 if num in sudoku[:, col]: return False # 检查所在 3x3 小矩阵是否有重复数字 start_row = (row // 3) * 3 start_col = (col // 3) * 3 for i in range(start_row, start_row + 3): for j in range(start_col, start_col + 3): if sudoku[i][j] == num: return False return True # 递归函数:填充数独网格 def solveSudoku(sudoku): for row in range(9): for col in range(9): if sudoku[row][col] == 0: for num in range(1, 10): if isValid(sudoku, row, col, num): sudoku[row][col] = num if solveSudoku(sudoku): return True sudoku[row][col] = 0 return False return True # 初始化 9x9 数独网格,这里以一个部分填充的网格为例 sudoku_grid = np.array([ [5, 3, 0, 0, 7, 0, 0, 0, 0], [6, 0, 0, 1, 9, 5, 0, 0, 0], [0, 9, 8, 0, 0, 0, 0, 6, 0], [8, 0, 0, 0, 6, 0, 0, 0, 3], [4, 0, 0, 8, 0, 3, 0, 0, 1], [7, 0, 0, 0, 2, 0, 0, 0, 6], [0, 6, 0, 0, 0, 0, 2, 8, 0], [0, 0, 0, 4, 1, 9, 0, 0, 5], [0, 0, 0, 0, 8, 0, 0, 7, 9] ]) # 检查初始网格是否有效 if not is_valid_initial_grid(sudoku_grid): print("初始网格初始化错误,请检查网格是否为 9x9 且满足数独规则。") else: # 打印初始数独网格 print("初始数独网格:") print(sudoku_grid) # 尝试求解数独 if solveSudoku(sudoku_grid): print("\n求解后的数独网格:") print(sudoku_grid) else: print("\n此数独无解")
11-13
import tkinter as tk from tkinter import messagebox, simpledialog # 数独求解函数 def solve_sudoku(board): def is_valid(board, row, col, num): for x in range(9): if board[row][x] == num or board[x][col] == num: return False start_row, start_col = 3 * (row // 3), 3 * (col // 3) for i in range(3): for j in range(3): if board[start_row + i][start_col + j] == num: return False return True def find_empty_location(board): for i in range(9): for j in range(9): if board[i][j] == 0: return i, j return None, None def solve(): row, col = find_empty_location(board) if row is None: return True for num in range(1, 10): if is_valid(board, row, col, num): board[row][col] = num if solve(): return True board[row][col] = 0 return False return solve() # 初始化数独棋盘 initial_board = [ [5, 3, 0, 0, 7, 0, 0, 0, 0], [6, 0, 0, 1, 9, 5, 0, 0, 0], [0, 9, 8, 0, 0, 0, 0, 6, 0], [8, 0, 0, 0, 6, 0, 0, 0, 3], [4, 0, 0, 8, 0, 3, 0, 0, 1], [7, 0, 0, 0, 2, 0, 0, 0, 6], [0, 6, 0, 0, 0, 0, 2, 8, 0], [0, 0, 0, 4, 1, 9, 0, 0, 5], [0, 0, 0, 0, 8, 0, 0, 7, 9] ] class SudokuGUI: def __init__(self, root, board): self.root = root self.board = [row[:] for row in board] self.user_board = [row[:] for row in board] self.entries = [] self.create_widgets() def create_widgets(self): self.frame = tk.Frame(self.root, bg="white") self.frame.pack(pady=20) for i in range(9): row_entries = [] for j in range(9): if self.board[i][j] != 0: entry = tk.Entry(self.frame, width=2, font=("Arial", 20), justify="center", state="disabled") entry.insert(0, str(self.board[i][j])) else: entry = tk.Entry(self.frame, width=2, font=("Arial", 20), justify="center") entry.grid(row=i, column=j, padx=2, pady=2) if (i // 3 + j // 3) % 2 == 1: entry.config(bg="#f0f0f0") row_entries.append(entry) self.entries.append(row_entries) # 按钮 button_frame = tk.Frame(self.root) button_frame.pack(pady=10) solve_button = tk.Button(button_frame, text="求解", command=self.solve_puzzle) solve_button.pack(side="left", padx=5) reset_button = tk.Button(button_frame, text="重置", command=self.reset_puzzle) reset_button.pack(side="left", padx=5) answer_button = tk.Button(button_frame, text="答案", command=self.show_answer) answer_button.pack(side="left", padx=5) def solve_puzzle(self): current_board = [[int(entry.get()) if entry.get() else 0 for entry in row] for row in self.entries] if solve_sudoku(current_board): for i in range(9): for j in range(9): if self.user_board[i][j] == 0: self.entries[i][j].delete(0, tk.END) self.entries[i][j].insert(0, str(current_board[i][j])) else: messagebox.showinfo("提示", "当前数独无解!") def reset_puzzle(self): for i in range(9): for j in range(9): if self.user_board[i][j] == 0: self.entries[i][j].delete(0, tk.END) def show_answer(self): solved_board = [row[:] for row in initial_board] if solve_sudoku(solved_board): for i in range(9): for j in range(9): self.entries[i][j].delete(0, tk.END) self.entries[i][j].insert(0, str(solved_board[i][j])) else: messagebox.showinfo("提示", "当前数独无解!") # 主程序 root = tk.Tk() root.title("数独游戏") app = SudokuGUI(root, initial_board) root.mainloop() 这个代码有问题,运行后的界面不会生成数字
05-31
【激光质量检测】利用丝杆与步进电机的组合装置带动光源的移动,完成对光源使用切片法测量其光束质量的目的研究(Matlab代码实现)内容概要:本文研究了利用丝杆与步进电机的组合装置带动光源移动,结合切片法实现对激光光源光束质量的精确测量方法,并提供了基于Matlab的代码实现方案。该系统通过机械装置精确控制光源位置,采集不同截面的光强分布数据,进而分析光束的聚焦特性、发散角、光斑尺寸等关键质量参数,适用于高精度光学检测场景。研究重点在于硬件控制与图像处理算法的协同设计,实现了自动化、高重复性的光束质量评估流程。; 适合人群:具备一定光学基础知识和Matlab编程能力的科研人员或工程技术人员,尤其适合从事激光应用、光电检测、精密仪器开发等相关领域的研究生及研发工程师。; 使用场景及目标:①实现对连续或脉冲激光器输出光束的质量评估;②为激光加工、医疗激光、通信激光等应用场景提供可靠的光束分析手段;③通过Matlab仿真与实际控制对接,验证切片法测量方案的有效性与精度。; 阅读建议:建议读者结合机械控制原理与光学测量理论同步理解文档内容,重点关注步进电机控制逻辑与切片数据处理算法的衔接部分,实际应用时需校准装置并优化采样间距以提高测量精度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值