0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AtCoderのDFSでREが一生取れない問題

Posted at

背景

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時間半ほど試行錯誤しました。こういう特有の仕様みたいなやつあれば、ぜひ教えてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?