[Python/Python/標準アルゴリズム]1260.DFSとBFS
8123 ワード
質問する
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の概念を知っていますが、符号化で実現するには全く分かりませんので、他の人のコードを参考にして、解釈の方向に向かって問題を解きました.
Reference
この問題について([Python/Python/標準アルゴリズム]1260.DFSとBFS), 我々は、より多くの情報をここで見つけました https://velog.io/@dustndus8/파이썬Python백준알고리즘-1260.-DFS와-BFSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol