[python]11724接続表示個数
👉 11724接続要素数
[正解コード]
import sys
sys.setrecursionlimit(10**6)
def dfs(graph, visited, n):
visited[n] = 1
for i in graph[n]:
if visited[i] != 1:
visited[i] = 1
dfs(graph, visited, i)
n, m = map(int, sys.stdin.readline().split())
graph = {}
for i in range(n):
graph[i + 1] = []
visited = [0] * (len(graph) + 1)
for i in range(m):
u, v = map(int, sys.stdin.readline().split())
graph[u].append(v)
graph[v].append(u)
visited[0] = 1
cnt = 0
while 0 in visited:
node = 0
for i in range(len(visited)):
if visited[i] == 0:
node = i
break
if node != 0:
dfs(graph, visited, node)
cnt += 1
print(cnt)
[回答]-mainではwhile文と内部のfor文を統合するとO(n^2)の時間的複雑さが生じるが,定点の個数1<=n<=1000となるため,このようにした.(Python 3の提出で10,000は簡単に完了...)
ランタイムエラー
Pythonの場合、recursionlimitは1000なのでsys.setrecursionlimit(10**6)で解決できますが、この値を再帰的に超えるとセグメントエラーが発生します.
bfs、dpは、dfsと比較して、再帰ではなく繰り返し文を使用することによって解決することができる.(リンクを参照)
[アプリケーション構造とアルゴリズム]
Reference
この問題について([python]11724接続表示個数), 我々は、より多くの情報をここで見つけました https://velog.io/@yuchan/Python-11724-연결-요쇼-개수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol