Una pregunta del día: currículo 207 (clasificación topológica)

207. Programa del curso

Clasificación topológica, puede usar dfs para registrar el orden topológico a la inversa, o puede usar bfs para registrar el orden topológico a lo largo del camino. Me gusta este último.

Además , es muy conveniente registrar el cambio de tamaño y auto: enumeración de las variables globales del vector .

Además, suspiro que es realmente conveniente escribir tablas auxiliares ahora, porque los vectores pueden aplicarse dinámicamente al espacio. En el pasado, cuando solo se usaban matrices, teníamos que escribir una tabla auxiliar muy problemática.

Adjunte la solución oficial del problema: https://leetcode-cn.com/problems/course-schedule/solution/ke-cheng-biao-by-leetcode-solution/

class Solution {
private:
    vector<vector<int>> edges;
    vector<int> indeg;
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        edges.resize(numCourses);
        indeg.resize(numCourses);
        for (auto inf : prerequisites)
        {
            indeg[inf[0]]++;
            edges[inf[1]].push_back(inf[0]);
        }
        queue<int> q;
        int count=0;
        for (int i=0;i<numCourses;i++)
        if (indeg[i]==0) 
        {
            count++;
            q.push(i);
        }
        while (!q.empty())
        {
            int w=q.front();
            q.pop();
            for (auto x : edges[w])
            {
                if (--indeg[x]==0)
                {
                    q.push(x);
                    count++;
                }
            }
        }
        if (count==numCourses) return true;
        else return false;

    }
};

 

Supongo que te gusta

Origin blog.csdn.net/hbhhhxs/article/details/107792480
Recomendado
Clasificación