标签:span empty i++ mat 成功 删掉 return ica vector
拓扑排序将有向无环图的所有顶点排成一个线性序列,使得其中任意两个顶点\(u、v\),若存在有向边\(u->v\),那么在线性序列中\(u\)必然在\(v\)之前。
思想:
/*复杂度O(V+E)*/
int vertexNum;
vector<int> adjList[MAXV]; //邻接表
int inDegree[MAXV]; //顶点入度,读入时记录
bool topologicalSort()
{
int cnt = 0;
queue<int> q; //若有多个入度为0的顶点要选择编号最小的,可使用priority_queue
//将所有入度为0的顶点入队
for(int i = 0;i < vertexNum;i++)
{
if(inDegree[i] == 0)
q.push(i);
}
while(!q.empty())
{
int front = q.front();
cout << front << endl; //输出拓扑序列
q.pop();
for(int i = 0;i < adjList[front].size();i++)
{
int v = adjList[front][i]; //front的后继结点
inDegree[v]--;
if(indegree[v] == 0)
q.push(v);
}
adjList[front].clear(); //删掉从该顶点出发的所有边
cnt++;
}
if(cnt == vertexNum)
return true;
else
return false;
}
标签:span empty i++ mat 成功 删掉 return ica vector
原文地址:https://www.cnblogs.com/EIMadrigal/p/11615114.html