class Solution {
public:
bool isDAG(int n, vector<pair<int, int>>& edges) {
if (n == 0)
return true;
int count = 0;
vector<int>degree(n);
vector<list<int>>result(n);
for (int i = 0; i < edges.size(); i++) //建立邻接表
{
result[edges[i].first].push_back(edges[i].second);
}
for (int i = 0; i < edges.size(); i++) //计算各顶点的入度
degree[edges[i].second]++;
stack<int>temp;
for (int i = 0; i < n; i++) //将入度为0的顶点压入进栈
{
if (degree[i] == 0)
temp.push(i);
}
while (!temp.empty())
{
int s = temp.top();
count++;
temp.pop();
for (list<int>::iterator it = result[s].begin(); it != result[s].end(); it++)
{
degree[*it]--;
if (degree[*it] == 0)
temp.push(*it);
}
}
if (count == n)
return true;
else
return false;
}
};
1004.无环图
最新推荐文章于 2024-11-04 09:19:37 发布