Pythonの標準1260問題を分析する
🐒 DFSとBFS
https://www.acmicpc.net/problem/1260
私の草
import sys
from collections import deque
n, m, v = map(int, input().split())
graph = [[] for _ 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)
for i in range(1, n+1):
graph[i].sort()
def dfs(x):
visited[x] = True
print(x , end=' ')
for i in graph[x]:
if not visited[i]:
dfs(i)
def bfs(x):
visited[x] = True
queue = deque([x])
while queue:
x = queue.popleft()
print(x, end=' ')
for i in graph[x]:
if not visited[i]:
queue.append(i)
visited[i] = True
dfs(v)
visited = [False] * (n+1)
print()
bfs(v)
参考資料 🧠 問題を理解する
これはDFSとBFSアルゴリズムの使い方を把握できる問題である.
今はまだ混同していますが、コードを1行1行書いていくと、だんだん理解してきました.
2つ目の例では
5 5 3
5 4
5 2
1 2
3 4
3 1
このように入力する場合私の出力は
3 4 5 2 1
3 4 1 5 2
答えを誤る.答えは.
3 1 2 5 4
3 1 4 2 5
はい.私の答えが違うのは
for i in range(1, n+1):
graph[i].sort()
上のコードは各ノードを上に移動する順序で並べていないためです.順序のない双方向ノードといって、複数の答えがあるのではないでしょうか.
ただし、複数のアクセス可能な頂点がある場合は、まず頂点番号の小さい頂点にアクセスします.
この言葉は見るのが遅くてやっと納得した.😇
世界には賢い人がたくさんいます.
Reference
この問題について(Pythonの標準1260問題を分析する), 我々は、より多くの情報をここで見つけました https://velog.io/@mauserne/백준-1260-문제-분석-pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol