バックアップ-グラフ(#1260)
15733 ワード
https://www.acmicpc.net/problem/1260
Code 1
Code1
:隣接行列を用いてDFS,BFSを実現した.
DFSは再帰関数で実現され,BFSはqueueで実現される.
アクセスしたノードがリストに表示されます.
Code2:
隣接テーブルを用いてDFS,BFSを実現した.
DFSはスタックとして実装され、BFSはqueueとして実装される.
アクセスしたノードはdictで記録されます.
dictを使用すると、リストにアクセスしたノードを記録および確認するよりも高速です.dictでは、ある要素がlistよりも効率的に存在するかどうかを確認するプロセスがあるからです.
また,コード2はコード1よりも速い.
Code 1
import sys
def dfs(v):
print(v, end=' ')
already_visited[v] = 1
for i in range(1,n+1):
if adj_matrix[v][i] == 1 and already_visited[i] == 0:
dfs(i)
def bfs(v):
already_visited = [0]*(n+1)
queue = [v]
already_visited[v] = 1
while queue:
v = queue[0]
del queue[0]
print(v, end=' ')
for i in range(1, n+1):
if adj_matrix[v][i] == 1 and already_visited[i] == 0:
queue.append(i)
already_visited[i] = 1
n, m, v = map(int, input().split())
adj_matrix = [[0]*(n+1) for _ in range(n+1)]
for _ in range(m):
a, b = map(int, sys.stdin.readline().split())
adj_matrix[a][b] = 1
adj_matrix[b][a] = 1
already_visited = [0]*(n+1)
dfs(v)
print()
bfs(v)
Code 2import sys
def dfs(v):
visited = {}
stack = [v]
while stack:
s = stack.pop()
if s not in visited:
visited.setdefault(s)
stack += reversed(adj_dict[s])
return visited
def bfs(v):
visited = {}
queue = [v]
while queue:
s = queue[0]
del queue[0]
if s not in visited:
visited.setdefault(s)
queue += adj_dict[s]
return visited
n, m, v = map(int, input().split())
adj_dict = {i:[] for i in range(1,n+1)}
for i in range(1,m+1):
a, b = map(int, sys.stdin.readline().split())
adj_dict[a].append(b)
adj_dict[b].append(a)
for k in adj_dict:
adj_dict[k].sort()
dfs_result = dfs(v)
bfs_result = bfs(v)
print(' '.join(list(map(str, dfs_result))))
print(' '.join(list(map(str, bfs_result))))
リファレンス
Code1
:隣接行列を用いてDFS,BFSを実現した.
DFSは再帰関数で実現され,BFSはqueueで実現される.
アクセスしたノードがリストに表示されます.
Code2:
隣接テーブルを用いてDFS,BFSを実現した.
DFSはスタックとして実装され、BFSはqueueとして実装される.
アクセスしたノードはdictで記録されます.
dictを使用すると、リストにアクセスしたノードを記録および確認するよりも高速です.dictでは、ある要素がlistよりも効率的に存在するかどうかを確認するプロセスがあるからです.
また,コード2はコード1よりも速い.
Reference
この問題について(バックアップ-グラフ(#1260)), 我々は、より多くの情報をここで見つけました https://velog.io/@starteon/백준-그래프-1260テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol