int형 벡터가 주어지고 벡터의 index로부터 갈 수 있는 다른 노드의 인덱스가 적혀있으며,
다른 노드로 이동이 불가능한 인덱스는 -1이 적혀있다.
문제는 그래프를 분석하여 싸이클을 이루는 구간을 찾고 가장 긴 싸이클의 길이를 구하는 것이다.
class Solution {
public:
int longestCycle(vector<int>& edges) {
int n = edges.size();
vector<int> visited(n, 0);
_watch = 0;
int result{-1};
int startTime{1};
for (int i = 0; i < n; ++i)
{
if (visited[i] || edges[i] == -1)
{
continue;
}
startTime = _watch;
int temp = SearchDFS(i, startTime, edges, visited);
result = std::max(result, temp);
}
return result;
}
private:
int _watch;
int SearchDFS(int& index, int& startTime, vector<int>& edges, vector<int>& visited)
{
++_watch;
int next{edges[index]};
if (next == -1)
{
return - 1;
}
else if (visited[next])
{
if (startTime <= visited[next])
{
return _watch - visited[next];
}
return - 1;
}
visited[next] = _watch;
return SearchDFS(next, startTime, edges, visited);
}
};