def dfs_search(self, s, current_position, next_): if current_position >= len(self.edge_seq): s.pop() return while len(s) > 0: x = s.pop() i = 0 while i < len(self.graph.get_edge_nexts()[x]): #~ pdb.set_trace() y = self.graph.get_edge_nexts()[x][i] if self.f[x][y] or self.f[y][x]: i += 1 continue # 如果节点没有被使用过 if self.g2s[y] < 0: e = Edge(self.g2s[x], next_, self.graph.get_node_labels()[x], self.graph.get_edge_labels()[x][i], self.graph.get_node_labels()[y]) compare_result = e.compare_with( self.edge_seq[current_position]) if compare_result == e.edge_smaller: self.is_min = False return elif compare_result == e.edge_larger: i += 1 continue # 相等则继续比较 self.g2s[y] = next_ self.f[x][y] = True self.f[y][x] = True s.append(y) self.dfs_search(s, current_position + 1, next_ + 1) if not self.is_min: return else: self.f[x][y] = False self.f[y][x] = False self.g2s[y] = -1 i += 1 # 如果节点有被使用过 else: e = Edge(self.g2s[x], self.g2s[y], self.graph.get_node_labels()[x], self.get_edge_labels()[x][i], self.get_node_labels()[y]) compare_result = e.compare_with( self.edge_seq[current_position]) if compare_result == e.edge_smaller: self.is_min = False return elif compare_result == e.edge_larger: i += 1 continue g2s[y] = self.next_ self.f[x][y] = True self.f[y][x] = True s.push(y) self.dfs_search(s, current_position + 1, next_) if not self.is_min: return self.f[x][y] = True self.f[y][x] = True i += 1