def __init__(self): super().__init__() self.blocks = [] self.zero_row = 0 self.zero_column = 0 self.gltMain = QGridLayout() self.mp_size = ef.mp_size self.begin, self.end = ef.init_map() self.timer = QTimer(self) # 初始化一个定时器 self.a_star_timer = QTimer(self) # 初始化一个定时器 self.timer.timeout.connect(self.operate) # 计时结束调用operate()方法 self.initUI()
def command(c): global b, e if c == '3': ef.mp_size = 3 b, e = ef.init_map() print("map size changed to 3!") elif c == '4': ef.mp_size = 4 b, e = ef.init_map() print("map size changed to 4!") elif c == 'h' or c == 'help': command_help() elif c == 'r' or c == 'refresh': b, e = ef.init_map() print("map refreshed!") elif c == "run": run() elif c == "v" or c == "visualize": app = QApplication(sys.argv) ex = MainPage() app.exec_() elif c == "dfs": run_func(d.dfs, d) elif c == "bfs": run_func(bf.bfs, bf) elif c == "astar": run_func(astar.a_star, astar) elif c == "backtrack": run_func(bt.backtrack, bt) elif c == "begin" or c == "b": print("begin:") ef.printMap(b) elif c == "end" or c == "e": print("end:") ef.printMap(e) else: print("没有此指令,请重新输入!")
def onInit(self): # 产生顺序数组 self.mp_size = ef.mp_size self.begin, self.end = ef.init_map() self.numbers = self.begin self.blocks.clear() # 将数字添加到二维数组 for row in range(self.mp_size): self.blocks.append([]) for column in range(self.mp_size): temp = self.numbers[row * self.mp_size + column] if temp == 0: self.zero_row = row self.zero_column = column self.blocks[row].append(temp) self.updatePanel()
for mb in maybe: if not in_list(mb, untracked): if not in_list(mb, tracked): untracked.append(mb.copy()) # 如果找到通路,则输出 if flag: asr = [temp.get("map")] p = temp.get("parent") while p is not None: for i in tracked: if ef.compare(p, i.get("map")): asr.append(i.get("map")) p = i.get("parent") break print("answer: ") out_asr = asr.copy() while len(asr): ef.printMap(asr.pop()) print() else: print(flag) return out_asr if __name__ == '__main__': b, e = ef.init_map() dfs(b, e) print(count)
def keyPressEvent(self, event): key = event.key() if key == Qt.Key_D: start = time.time() self.asr = DFS.dfs(self.begin, self.end) spend_time = time.time() - start steps = len(self.asr) if DFS.flag: self.timer.start(500) # 设置计时间隔并启动 ip = InfoPage(self, "Training Success In DFS!\n" "begin:\n" + ef.as_str(self.begin) + "time: " + str(spend_time) + "\n" "visited nodes: " + str(DFS.count) + "\n" "result steps: " + str(steps)) ip.show() else: ip = InfoPage(self, "Training Failed In DFS!\n") ip.show() elif key == Qt.Key_S: ASTAR.a_star_visualize(self, self.begin, self.end) elif key == Qt.Key_B: start = time.time() self.asr = BFS.bfs(self.begin, self.end) spend_time = time.time() - start steps = len(self.asr) if BFS.flag: self.timer.start(500) # 设置计时间隔并启动 ip = InfoPage(self, "Training Success In BFS!\n" "begin:\n" + ef.as_str(self.begin) + "time: " + str(spend_time) + "\n" "visited nodes: " + str(BFS.count) + "\n" "result steps: " + str(steps)) ip.show() else: ip = InfoPage(self, "Training Failed In BFS!\n") ip.show() elif key == Qt.Key_A: start = time.time() self.asr = ASTAR.a_star(self.begin, self.end) spend_time = time.time() - start steps = len(self.asr) if ASTAR.flag: self.timer.start(500) # 设置计时间隔并启动 ip = InfoPage(self, "Training Success In ASTAR!\n" "begin:\n" + ef.as_str(self.begin) + "time: " + str(spend_time) + "\n" "visited nodes: " + str(ASTAR.count) + "\n" "result steps: " + str(steps)) ip.show() else: ip = InfoPage(self, "Training Failed In ASTAR!\n") ip.show() elif key == Qt.Key_T: start = time.time() self.asr = BACKTRACK.backtrack(self.begin, self.end) spend_time = time.time() - start steps = len(self.asr) if BACKTRACK.flag: self.timer.start(500) # 设置计时间隔并启动 ip = InfoPage(self, "Training Success In BACKTRACK!\n" "begin:\n" + ef.as_str(self.begin) + "time: " + str(spend_time) + "\n" "visited nodes: " + str(BACKTRACK.count) + "\n" "result steps: " + str(steps)) ip.show() else: ip = InfoPage(self, "Training Failed In BACKTRACK!\n") ip.show() elif key == Qt.Key_R: self.begin, self.end = ef.init_map() self.numbers = self.begin self.onInit() elif key == Qt.Key_3: self.setWindowTitle('八数码问题') ef.mp_size = 3 for i in range(self.gltMain.count()): self.gltMain.itemAt(i).widget().deleteLater() self.onInit() elif key == Qt.Key_4: self.setWindowTitle('十五数码问题') ef.mp_size = 4 for i in range(self.gltMain.count()): self.gltMain.itemAt(i).widget().deleteLater() self.onInit()