[Python/Python/標準アルゴリズム]1260.DFSとBFS


質問する


DFSを使用してグラフィックをナビゲートし、BFSを使用してグラフィックをナビゲートした結果を出力するプログラムを作成します.ただし、複数のアクセス可能な頂点がある場合は、最初にアクセスできる頂点番号が小さく、アクセスできるポイントがない場合は終了します. 頂点番号は1番からN番までです.

入力


1行目は頂点の個数N(1≦N≦1000)、幹線の個数M(1≦M≦10000)、探索を開始する頂点の番号Vを与える.次のM行は、幹線接続の2つの頂点の番号を示します.2つの頂点の間に複数の幹線があります.入力された幹線は双方向です.

しゅつりょく


1行目はDFSを実行した結果を出力し、2行目はBFSを実行した結果を出力する.Vから順にアクセスポイントを出力すればよい.

入力例1

4 5 1
1 2
1 3
1 4
2 4
3 4

サンプル出力1

1 2 4 3
1 2 3 4

コード#コード#

import sys
from collections import deque
def dfs(n):
    print(n,end=' ')
    visited[n]=True
    for i in graph[n]:
        if not visited[i]:
            dfs(i)

def bfs(n):
    visited[n]=True
    queue=deque([n])
    while queue:
        v = queue.popleft()
        print(v,end=' ')
        for i in graph[v]:
            if not visited[i]:
                queue.append(i)
                visited[i]=True

n, m, v = map(int, sys.stdin.readline().split())
graph = [[] for i in range(n+1)]
visited=[False]*(n+1)

# 인접 그래프 만들기
for i in range(m):
    a,b = map(int, sys.stdin.readline().split())
    graph[a].append(b)
    graph[b].append(a)

# 인접 그래프 안에 있는 [] sort하기
for i in range(1,n+1):
    graph[i].sort()

# DFS
dfs(v)

# 초기화시키고 BFS
visited=[False]*(n+1)
print()
bfs(v)

に答える



私はBFS、DFSの概念を知っていますが、符号化で実現するには全く分かりませんので、他の人のコードを参考にして、解釈の方向に向かって問題を解きました.