バックアップ1260 DFSとBFS

1662 ワード



これはDFSとBFSのバックアップを練習できる問題です.
アイデアは次のとおりです.
1.入力したInputをグラフィックとしてマークする
ex)2,3番が1番ノードに接続されている場合、図[1]=2,3

  • 図中の各ノードの接続ノードをノード番号に揃えます.

  • bfsとdfsをそれぞれ実行できる2つの関数を作成します.
    bfsはキューを使用し,dfsは再帰方式を使用する.
  • from collections import deque
    
    n, m , start = map(int, input().split())
    
    graph = []
    visit = set()
    
    for i in range(n+1):
        graph.append([])
    for i in range(m):
        a, b = map(int, input().split())
        graph[a].append(b)
        graph[b].append(a)
        
    for i in graph:
        i.sort(reverse=False)
        
    def bfs(graph, start):
        answer = []
        visit = set()
        queue = deque()
        queue.append(start) #시작점 
        answer.append(start) # 시작점 
        visit.add(start)#시작점 
        
        while(queue):
            poped = queue.popleft()        
            for i in graph[poped]: #꺼내진 친구와 연결된 노드들을 방문처리
                if ( i in visit ):
                    continue
                visit.add(i)
                answer.append(i)
                queue.append(i) # queue에 삽입
        return answer
        
    def dfs(graph, node, answer, visit):
        visit.add(node)
        answer.append(node)
        for i in graph[node]:
            if ( i not in visit):
                dfs(graph,i,answer,visit)
                
    
    answer2 = []
    visit2 = set()
    dfs(graph,start, answer2, visit2)
    
    for i in answer2:
        print(i , end=" ")
    
    print("")
    
    for i in bfs(graph,start):
        print ( i , end = " ")
    
        
    エラーの原因:なし