from collections import defaultdict
import sys
sys.setrecursionlimit(200)
temp = []
n = int(input())
numbers = [input().split() for i in range(int(n))]
for i,j in enumerate(numbers):
for k, l in enumerate(j):
if l == '1':
temp.append([i + 1, k + 1])
graph = defaultdict(list)
for number in temp:
if number[0] != number[1]:
graph[int(number[0])].append(number[1])
cycle = False
used = {i: False for i in range(1, n+1)}
Color = [0] * (n + 1)
CycleFound = False
predki = [0] * (n + 1)
cycle = []
p = 0
def dfs(v):
Color[v] = 1
cycle.append(v)
for u in graph[v]:
if Color[u] == 0:
predki.insert(u, v)
dfs(u)
elif Color[v] == 1 and u != predki[v]:
global p
while p < 1:
global CycleFound
CycleFound = True
if v not in graph[cycle[0]]:
del cycle[0]
print('YES')
print(len(cycle))
print(' '.join(map(str, cycle)))
p += 1
cycle.clear()
Color[v] = 2
for i in range(1, n + 1):
if Color[i] == 0:
dfs(i)
if CycleFound == False:
print('NO')
ЯКонтест выдает ошибку RE.
Формат ввода
В первой строке дано одно число n — количество вершин в графе ( 1 ≤ n ≤ 500 ). Далее в n строках задан сам граф матрицей смежности.
Формат вывода
Если в иcходном графе нет цикла, то выведите «NO». Иначе, в первой строке выведите «YES», во второй строке выведите число k — количество вершин в цикле, а в третьей строке выведите k различных чисел — номера вершин, которые принадлежат циклу в порядке обхода (обход можно начинать с любой вершины цикла). Если циклов несколько, то выведите любой.
ОШИБКА:
Traceback (most recent call last):
File "f68a00f8-de32-4961-a41b-d6a89720f012", line 45, in
dfs(i)
File "f68a00f8-de32-4961-a41b-d6a89720f012", line 28, in dfs
dfs(u)
File "f68a00f8-de32-4961-a41b-d6a89720f012", line 28, in dfs
dfs(u)
File "f68a00f8-de32-4961-a41b-d6a89720f012", line 28, in dfs
dfs(u)
[Previous line repeated 3 more times]
File "f68a00f8-de32-4961-a41b-d6a89720f012", line 34, in dfs
if v not in graph[cycle[0]]:
IndexError: list index out of range