python - 图表 dfs 相关代码几乎通过了所有测试用例,少数失败
问题描述
我有以下问题和相应的代码:
您有一个大小为 NxM 的矩形字段。您有 K 个标记的单元格。从输入文件中读取 N、M、K 和标记的单元格坐标。如果两个标记的单元格共享一条边,则它们被认为是相邻的。任务是计算连接组件的数量并将其写入输出文件。
以下代码通过了几乎所有测试用例并在我在 repl.it 上提出的所有用例上运行,但在自动检查系统中给出了运行时错误。我无法真正访问错误是什么。
with open("input.txt") as f:
inp = f.readlines()
line1 = list(map(int, inp[0].strip().split()))
N = line1[0]
M = line1[1]
K = line1[2]
#represent marked cells as a dictionary, key = cells, value = list of marked neighbors
dict_ = {tuple(map(int, x.strip().split())): [] for x in inp[1:]}
#collect neighbors
def get_neighbors(idx):
i = idx[0]
j = idx[1]
ans = [(i - 1, j), (i + 1, j), (i, j - 1), (i, j + 1)]
return ans
#add them to the graph
def add_neighbors(idx):
neighbors = get_neighbors(idx)
dict_[idx] = [x for x in neighbors if x in dict_.keys()] # return(None)
def dfs_recursive(graph, vertex, visited, path):
visited[vertex] = True
path.append(vertex)
for neighbor in graph[vertex]:
if not visited[neighbor]:
path = dfs_recursive(graph, neighbor, visited, path)
return path
def conn_comps(graph):
visited = {vertex: False for vertex in graph}
comps = []
for vertex in graph:
if not visited[vertex]:
path = []
v_path = dfs_recursive(graph, vertex, visited, path)
comps.append(v_path)
return comps
#populate neighbors
for idx in dict_.keys():
add_neighbors(idx)
ans = len(conn_comps(dict_))
FOUT = open("output.txt", "w")
FOUT.write(str(ans))
FOUT.close()
我唯一的猜测是字典大小的问题 - 根据定义,K 可以高达 10^5,N,M 也可以高达 10^5。有人可以评论并建议其他改进吗?这是一个旧的入门级比赛的练习题。
解决方案
万一有人发现 - 你只需达到 python 的默认递归限制 1000。需要迭代地重写或手动增加它sys.setrecursionlimit
。唉。
推荐阅读
- c# - IoT 中心 C2D 消息属性溢出到正文
- xml - INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: 解析失败./base.apk: AndroidManifest.xml]
- javascript - 无法在 firebase 功能上将视频与 ffmpeg 结合
- python -
和
网页抓取时的顺序 - r - ddply() 说我的数据中没有一些缺失值,知道为什么吗?
- python - 将 Android 应用程序连接到 Python 服务器
- sql - 如何在 SQL 中使用其他表中的数据创建小计
- google-apps-script - 由于大数据集,谷歌脚本不断崩溃
- android - 使用 Gson 反序列化动态 API 响应
- apache-spark - HDInsigh Spark 如何使用以下代码