当前位置: 首页 > news >正文

自己用dw做网站要多久鄂尔多斯网架公司

自己用dw做网站要多久,鄂尔多斯网架公司,附近学电脑培训班,网络公司做机场网站Python实现汉诺塔演示程序 汉诺塔问题 一个板子上有三根柱子以及一些大小各不相同的圆盘。我们分别把这三根柱子叫做起始柱A、辅助柱B及目标柱C#xff0c;汉诺塔移动圆盘的规则如下#xff1a; 把起始柱A上所有的圆盘都移动到C柱#xff0c;且在移动过程中始终保持圆盘从…Python实现汉诺塔演示程序 汉诺塔问题 一个板子上有三根柱子以及一些大小各不相同的圆盘。我们分别把这三根柱子叫做起始柱A、辅助柱B及目标柱C汉诺塔移动圆盘的规则如下 把起始柱A上所有的圆盘都移动到C柱且在移动过程中始终保持圆盘从小到大排列即大盘在下、小盘在上。 换句话说用户在移动圆盘时遵循以下规则 1每次只能移动一个圆盘。 2每次移动只能将柱子顶部的圆盘移动到另一个柱子的顶部。 3圆盘只能放在更大的圆盘上面或空柱子上。 汉诺塔问题是用递归方法求解的一个典型问题在此给出算法的模拟演示使学生更直观的了解递归算法的思想。 这里给出Python实现用鼠标拖动圆盘。 先给出运行效果示意图 源码如下 import tkinter as tk from tkinter import ttk, messageboxclass HanoiGame(tk.Tk):def __init__(self):super().__init__()self.title(汉诺塔游戏)self.geometry(600x550)self.canvas tk.Canvas(self, width600, height400, bg#f0f0f0)self.canvas.pack()# 初始化游戏变量self.numDisks 3 # 圆盘数量self.towers [[], [], []] # 代表三个塔的列表self.draggingDisk None # 当前正在拖动的圆盘self.draggingDiskSize 0 # 拖动的圆盘的大小self.init_controls() # 初始化控制面板self.init_game() # 初始化游戏def init_controls(self):control_frame tk.Frame(self) # 创建控制面板框架control_frame.pack(filltk.X, pady5)tk.Label(control_frame, text选择圆盘数量).pack(sidetk.LEFT, padx5)self.numDisksVar tk.IntVar(value3)numDisksCombo ttk.Combobox(control_frame, textvariableself.numDisksVar, values[1, 2, 3, 4, 5, 6, 7, 8], width3)numDisksCombo.pack(sidetk.LEFT, padx5)tk.Button(control_frame, text开始游戏, commandself.init_game).pack(sidetk.LEFT, padx5)tk.Button(control_frame, text提示, commandself.show_hints).pack(sidetk.LEFT, padx5)#用一个新的Frame用于包含文本框和滚动条。这样做是为了确保它们能够一起正确地布局hints_frame tk.Frame(self) hints_frame.pack(filltk.BOTH, expandTrue, padx5, pady5)self.hintsBox tk.Text(hints_frame, height5, statedisabled) # 初始化为禁用状self.hintsBox.pack(sidetk.LEFT, filltk.BOTH, expandTrue)scrollbar tk.Scrollbar(hints_frame, commandself.hintsBox.yview)scrollbar.pack(sidetk.RIGHT, filltk.Y)self.hintsBox.config(yscrollcommandscrollbar.set)def init_game(self):初始化或重置游戏状态self.numDisks self.numDisksVar.get() # 获取用户选择的圆盘数量self.towers [[i for i in range(self.numDisks, 0, -1)], [], []] # 重置塔self.draw_game() # 绘制游戏界面self.clear_hints() # 清空提示信息def clear_hints(self):self.hintsBox.config(statenormal) # 允许编辑文本框以清空内容self.hintsBox.delete(1.0, tk.END) # 清空文本框self.hintsBox.config(statedisabled) # 再次禁用文本框以防止编辑def draw_game(self):self.canvas.delete(all)for i, label in enumerate([A, B, C]):x 100 i * 200self.canvas.create_rectangle(x - 10, 300, x 10, 150, fillgray)self.canvas.create_text(x, 140, textlabel, font(Arial, 16))for i, tower in enumerate(self.towers):for j, disk in enumerate(tower):self.draw_disk(i, j, disk)self.canvas.tag_bind(disk, ButtonPress-1, self.start_drag)self.canvas.tag_bind(disk, B1-Motion, self.drag)self.canvas.tag_bind(disk, ButtonRelease-1, self.stop_drag)def draw_disk(self, tower_index, disk_index, disk_size):x 100 tower_index * 200y 300 - disk_index * 20self.canvas.create_rectangle(x - disk_size * 10, y, x disk_size * 10, y - 20, fillblue, tags(disk, f{tower_index}-{disk_index}, fsize{disk_size}))def start_drag(self, event):closest_disk self.canvas.find_closest(event.x, event.y)[0]tags self.canvas.gettags(closest_disk)for tag in tags:if tag.startswith(size):self.draggingDiskSize int(tag.replace(size, ))if - in tag:tower_index, disk_index map(int, tag.split(-))# 检查是否是塔顶的圆盘if disk_index len(self.towers[tower_index]) - 1:self.draggingDisk closest_diskelse:self.draggingDisk Nonereturn # 如果不是塔顶的圆盘则不允许拖动def drag(self, event):if self.draggingDisk:self.canvas.coords(self.draggingDisk, event.x - self.draggingDiskSize * 10, event.y - 10, event.x self.draggingDiskSize * 10, event.y 10)def stop_drag(self, event):if self.draggingDisk:tower_index min(max((event.x - 100) // 200, 0), 2)disk_tag self.canvas.gettags(self.draggingDisk)[1]source_tower, disk_index map(int, disk_tag.split(-))disk_size self.towers[source_tower][disk_index]if not self.towers[tower_index] or disk_size self.towers[tower_index][-1]:self.towers[tower_index].append(self.towers[source_tower].pop(disk_index))self.draw_game()self.check_win()else:self.draw_game() # 重新绘制以修正位置self.draggingDisk Nonedef check_win(self):# 检查是否所有圆盘都移动到了最右边的柱子上if len(self.towers[2]) self.numDisks:messagebox.showinfo(成功, 恭喜你成功完成了游戏)def show_hints(self):显示解决游戏的步骤提示steps []self.generate_hanoi_steps(self.numDisks, A, C, B, steps)self.hintsBox.config(statenormal)self.hintsBox.delete(1.0, tk.END)for i, step in enumerate(steps, start1): # start1 表示序号从1开始self.hintsBox.insert(tk.END, f{i}. {step}\n) # 在每条提示信息前加入序号self.hintsBox.config(statedisabled)def generate_hanoi_steps(self, n, source, target, auxiliary, steps):if n 0:self.generate_hanoi_steps(n - 1, source, auxiliary, target, steps)steps.append(f{source} → {target})self.generate_hanoi_steps(n - 1, auxiliary, target, source, steps)if __name__ __main__:app HanoiGame()app.mainloop()附录、 汉诺塔递归算法文字版 # 参数n 层数a 起点 , b 辅助(中转) c 目标 def move(n,a,b,c):if n1: #当只有一个圆盘时只需从最左端移向最右端print(a,--,c) #面板可视化可以通过列举图标表现移动的步骤形式else:move(n-1,a,c,b) #将前n-1个盘子从a移动到b上move(1,a,b,c) #将最底下的最后一个盘子从a移动到c上move(n-1,b,a,c) #将b上的n-1个盘子移动到c上nint(input(请输入汉诺塔的层数并回车:\n)) move(n,A,B,C)
http://www.pierceye.com/news/661511/

相关文章:

  • 黄山网站建设免费咨询网页制作初学者
  • 小说网站模板温州建设集团有限公司网站
  • 医疗器械为什么做网站杭州网站制作培训
  • 村志网站建设品牌设计logo图片
  • 网站更新服务公司网页打不开显示404要怎么处理
  • 注册公司是在哪个网站网站建设案例步骤
  • 机械设备网站源码中国神鹰网站建设
  • access 网站源码安阳市地图
  • 临沂房产和房建设局网站双和关键词排名怎么查
  • 建网站多少费用301不同类型网站
  • 深圳seo网站排名优化贵州省都匀市网站建设
  • 个人网站风格设计做网站时需要注意什么问题
  • 时装网站建设的背景软装设计费用
  • 排名轻松seo 网站国内开源平台
  • 常德做网站公司哪家好雷达图 做图网站
  • 做网站的环境配置wordpress手机版本
  • 市场网站建设济南智能网站建设
  • 淄博网站的优化大数据开发过程
  • 德阳网站建设公司做抢单软件的网站
  • 金融类的网站怎么做地方门户网站建设多少钱
  • 网站建设周末培训长春网站建设服务
  • 网站宝建站助手呼市地区做网站公司
  • 网站开发需要用到哪些设备建立网站得多少钱
  • 广州最好网站策划外网网站有什么好的推荐
  • 企业营销型企业网站建设cpa推广联盟平台
  • 南山区公司网站制作网站建设都 包括哪些
  • 域名备案网站建设方案公司网站设计怎么做
  • wordpress网站地图生成插件门户网站管理流程
  • 网站设计工程师培训关键词排名优化公司外包
  • 做电影资源网站手机版交通运输部: 优化交通运输领域防控