1219. [S/W 문제해결 기본] 4일차 - 길찾기

풀이

class Stack:

    def __init__(self):
        self.stack = [-1] * 100
        self.idx = -1

    # 스택이 비어있는지 검사하는 함수
    def is_empty(self):
        if self.idx == -1:
            return True
        return False

    # 스택 푸시
    def push(self, item):
        self.idx += 1
        self.stack[self.idx] = item

    # 스택 팝
    def pop(self):
        if self.idx == -1:
            return None
        item = self.stack[self.idx]
        self.stack[self.idx] = -1
        self.idx -= 1
        return item

    # 스택 맨 위의 값을 반환하는 함수
    def peek(self):
        return self.stack[self.idx]


def DFS(stack: Stack, V, E, graph, S, G):

    visited = [False for _ in range(V)]

    stack.push(S)
    visited[S] = True
    if S == G:
        return 1
    while not stack.is_empty():
        i = stack.peek()
        w = None
        for j in range(V):
            if (graph[i][j] == 1) and (not visited[j]):
                w = j
                visited[j] = True
                stack.push(w)
                break
        while w:
            i = stack.peek()
            if i == G:
                return 1
            w = None
            for j in range(V):
                if (graph[i][j] == 1) and (not visited[j]):
                    w = j
                    visited[j] = True
                    stack.push(w)
                    break
        stack.pop()

    return 0


# T = int(input())
T = 10

answer = []
for tc in range(1, T+1):
    stack = Stack()
    V = 100
    testcase, E = map(int, input().split())
    graph = [[0 for _ in range(V)] for _ in range(V)]
    input_seq = list(map(int, input().split()))
    for i in range(E):
        a = input_seq[i*2]
        b = input_seq[(i*2)+1]
        graph[a][b] = 1
    S, G = 0, 99

    result = DFS(stack, V, E, graph, S, G)

    answer.append(result)

for tc in range(1, T+1):
    print('#{} {}'.format(tc, answer[tc-1]))