Hikenny25

4일차 - 그래프 경로 본문

SW Expert Academy/Programming - Intermediate

4일차 - 그래프 경로

hikenny 2023. 12. 9. 18:27
class Graph:
    def __init__(self, size):
        self.size = size
        self.matrix = [[0] * size for _ in range(size)]
        self.visited = [0] * size
    
    def addEdge(self, v1, v2):
        self.matrix[v1][v2] = 1
    
    def dfs(self, start):
        self.visited[start] = 1
        
        for i in range(self.size):
            if self.matrix[start][i] == 1 and self.visited[i] == 0:
                self.dfs(i)
    
    def dfs2(self, start):
        stack = [start]

        while stack:
            var = stack.pop()
            
            if self.visited[var] == 0:
                self.visited[var] = 1
                
                for w in range(self.size):
                    if self.matrix[var][w] == 1:
                        stack.append(w)
    
    def return_visited(self):
        return self.visited

t = int(input())
ans = list()

for _ in range(t):
    v, e = map(int, input().split())
    g = Graph(v)

    for _ in range(e):
        v1, v2 = map(int, input().split())
        g.addEdge(v1-1, v2-1)

    s, goal = map(int, input().split())
    g.dfs2(s-1)

    visit_record = g.return_visited()

    if visit_record[goal-1] == 1:
        ans.append(1)
    else:
        ans.append(0)
    

for i in range(t):
    print(f"#{i+1} {ans[i]}")

 

DFS도 이진탐색처럼 지인짜 오랜만에 구현해본 것 같다...

예전에 썼던 코드 보면서 클래스 만들고 써봤는데 확실히 가독성은 좋은 것 같다..

 

dfs 는 재귀로 구현한 것이고 dfs2 는 스택과 반복문을 이용해서 구현해보았다~!

'SW Expert Academy > Programming - Intermediate' 카테고리의 다른 글

5일차 - Forth  (0) 2023.12.10
4일차 - 반복문자 지우기  (0) 2023.12.09
4일차 - 괄호검사  (0) 2023.12.09
4일차 - 종이붙이기  (0) 2023.12.09
3일차 - 글자수  (0) 2023.12.09
Comments