背景
AtCoderの競技プログラミングの鉄則、A62 - Depth First Searchを解いていたところ、RE(実行時エラー)が出続けていた。
実際のコード
N,M = map(int, input().split())
G = [[] for _ in range(N)]
for _ in range(M):
a,b = [int(i)-1 for i in input().split()]
G[a].append(b)
G[b].append(a)
visited = [False for _ in range(N)]
def dfs(node):
visited[node] = True
for nex in G[node]:
if visited[nex]==False:
dfs(nex)
dfs(0)
for i in range(N):
if visited[i] == False:
print("The graph is not connected.")
exit()
print("The graph is connected.")
解決策
ほかの方のソースコードを見ていると、
import sys
sys.setrecursionlimit(10**9)
なる普段見ないものがあった。これは再帰関数の上限回数を設定するものらしいが、こんなもので変わるのか?と疑いながらも提出してみると、ものの見事にACできた。
どうやらAtCoderでは再帰の深さが1000(?)ぐらいを超えるとREになってしまうようだ。これから再帰をするときは忘れずにつけよう! (覚えてるかな...)
最後に
これを見つけるまでに1時間半ほど試行錯誤しました。こういう特有の仕様みたいなやつあれば、ぜひ教えてください!