一、注意点
二、模板
vector<int> G[MAXV];//邻接表
int n,m,inDegree[MAXV];//顶点数,入度
//拓扑排序
bool topologicalSort()
{
int num=0;//记录加入拓扑序列的顶点数
queue<int> q;
for(int i=0;i<n;i++)
{
if(inDegree[i]==0)
{
q.push(i);//将所有的入度为0的顶点入队
}
}
while(!q.empty())
{
int u=q.front();//取队首顶点u
q.pop();
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];//u的后继结点v
inDegree[v]--;//顶点v的入度减一
if(inDegree[v]==0)//顶点v的入度减为0则入队
{
q.push(v);
}
}
G[u].clear();//清空顶点u的所有出边
num++; //加入拓扑序列的顶点数加一
}
if(num==n)return true;//加入拓扑序列的顶点数为n,说明拓扑排序成功
else return false;
}
三、适用问题
一个应用是判断图是否是有向无环图