Longest Cycle in a Graph

ㅋㅋ·2023년 3월 26일
0

알고리즘-leetcode

목록 보기
129/135

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);
    }
};

0개의 댓글