Ejemplo n.º 1
0
def preorder_nonrec(t, proc):
    if not callable(proc):
        raise ValueError('proc must be a function')

    s = SStack()
    while t is not None and not s.is_empty():
        while t is not None:
            proc(t.data)
            if t.right is not None:
                s.push(t.right)
            t = t.left
        t = s.pop()
Ejemplo n.º 2
0
def postorder_nonrec(t, proc):
    if not callable(proc):
        raise ValueError('proc must be a function')

    s = SStack()
    while t is not None or not s.is_empty():
        while t is not None:
            s.push(t)
            t = t.left if t.left is not None else t.right

        t = s.pop()
        proc(t.data)
        if not s.is_empty() and s.top().left == t:
            t = s.top().right
        else:
            t = None
Ejemplo n.º 3
0
def DFS_graph(graph, v0):
    """ Depth-First Search graph """
    vnum = graph.vertex_num()
    visited = [0] * vnum
    visited[v0] = 1
    DFS_seq = [v0]
    st = SStack()
    st.push((0, graph.out_edge(v0)))
    while not st.is_empty():
        i, edges = st.pop()
        if i < len(edges):
            v, e = edges[i]
            st.push((i + 1, edges))
            if not visited[v]:
                DFS_seq.append(v)
                st.push((0, graph.out_edge(v)))
    return DFS_seq
Ejemplo n.º 4
0
def maze_solver(maze, start, end):
    """ Backtracking solution , based on stack"""
    if start == end:
        print(start)
        return True
    st = SStack()
    mark(maze, start)
    st.push((start, 0))
    while not st.is_empty():
        pos, nxt = st.pop()
        for i in range(nxt, 4):
            nextp = pos[0] + dirs[i][0], pos[1] + dirs[i][1]
            if nextp == end:
                return True
            if passable(maze, nextp):
                st.push((pos, i + 1))
                mark(maze, nextp)
                st.push((nextp, 0))
                break
    print('No path found.')