def dfs(self, r: int): seen = np.zeros(self.n, np.bool_) l = [] s = ArrayStack() s.push(r) while s.size() > 0: i = s.pop() l.append(i) seen[i] = True ngh = self.out_edges2(i) for j in range(0, ngh.size()): if seen[ngh.get(j)] == False: s.push(ngh.get(j)) else: continue return l