コード例 #1
0
    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()
コード例 #2
0
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("没有此指令,请重新输入!")
コード例 #3
0
    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()
コード例 #4
0
        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)
コード例 #5
0
    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()