[これがコードテスト]BFS-特定距離を探す都市
12085 ワード
BFS
まずナビゲーション幅.隣接ノードからナビゲーションを開始するアルゴリズム
動作原理-キュー/実装方法-キューリソース構造の使用
白駿18352号です.
に質問
一部の国では1~N番都市とM本の一方通行道路が存在している.すべての道路の距離は1です.ある都市Xから、到達可能なすべての都市のうち、最短距離Kのすべての都市の番号を出力するプログラムを作成してください.なお、出発都市Xから出発都市Xまでの最短距離は常にゼロであると仮定する.
到達可能な都市のうち、最短距離Kの都市が1つもない場合、−1が出力される.
入力例1
4 4 2 1
1 2
1 3
2 3
2 4
出力例1
4
入力例2
4 3 2 1
1 2
1 3
1 4
出力例1
-1
私のやり方
DFSで再帰関数にアクセスし利用した.
サンプルの出力は正しいが、タイムアウト、再帰エラーが発生した.
「すべての道路の距離は1」なので、「幅優先」(BFS)を使用して問題を簡単に解決できます.
まずナビゲーション幅.隣接ノードからナビゲーションを開始するアルゴリズム
動作原理-キュー/実装方法-キューリソース構造の使用
白駿18352号です.
に質問
一部の国では1~N番都市とM本の一方通行道路が存在している.すべての道路の距離は1です.ある都市Xから、到達可能なすべての都市のうち、最短距離Kのすべての都市の番号を出力するプログラムを作成してください.なお、出発都市Xから出発都市Xまでの最短距離は常にゼロであると仮定する.
到達可能な都市のうち、最短距離Kの都市が1つもない場合、−1が出力される.
入力例1
4 4 2 1
1 2
1 3
2 3
2 4
出力例1
4
入力例2
4 3 2 1
1 2
1 3
1 4
出力例1
-1
私のやり方
DFSで再帰関数にアクセスし利用した.
サンプルの出力は正しいが、タイムアウト、再帰エラーが発生した.
N, M, K, X = map(int, input().split())
graph = [[] for _ in range(N+1)]
least_distance = [M] * (N+1)
visited = [False] * (N+1)
for i in range(M):
a, b = map(int, input.split())
graph[a].append(b)
def dfs(graph, v, visited, count):
visited[v] = True
least_distance[v] = count
count += 1
for i in graph[v]:
if visited[i] == True:
# 여기서 최단 거리 저장
least_distance[i] = count
break
dfs(graph, i, visited, count)
count = 0
dfs(graph, X, visited, 0)
if K not in least_distance:
print(-1)
else:
for i in range (1, len(least_distance)):
if least_distance[i] == K:
print(i)
問題の説明「すべての道路の距離は1」なので、「幅優先」(BFS)を使用して問題を簡単に解決できます.
from collections import deque
N, M, K, X = map(int, input().split())
graph = [[] for _ in range(N+1)]
for i in range(M):
a, b = map(int, input().split())
graph[a].append(b)
# 방문 하지 않은 도시는 -1로 표시(distance[0]은 사용하지 않음)
distance = [-1] * (N+1)
distance[X] = 0
queue = deque()
queue.append(X)
while queue:
now = queue.popleft()
for next_node in graph[now]:
if distance[next_node] == -1:
distance[next_node] = distance[now] + 1
queue.append(next_node)
if K not in distance:
print(-1)
else:
for i in range(len(distance)):
if distance[i] == K:
print(i)
Reference
この問題について([これがコードテスト]BFS-特定距離を探す都市), 我々は、より多くの情報をここで見つけました https://velog.io/@xxwb__/이것이-코딩-테스트다-BFS-특정-거리의-도시-찾기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol