对于有向无环的图
拓扑排序:将元素按照一定的时间(执行)顺序排序
拓扑序列:有向无环图中,若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。
生成拓扑序列的排序为拓扑排序。
拓扑排序的步骤
1.借助栈 将所有入度为0的顶点入栈
2.栈不空 获取栈顶元素top 出栈 并将以top为弧尾的弧删除
继续执行1,2,直到栈空或所有顶点被访问完
借助邻接矩阵。
void LinkGraph::TopologicalSort()
{
stack<int> ss;
int i;
Edge* p;
for (i = 0; i < m_NumVertex; i++)
{
if (m_VerArr[i].m_VerIn == 0)
{
ss.push(i);
}
for (i = 0; i < m_NumVertex; i++)
{
if (ss.empty())
{
cout << "有回路" << endl;
break;
}
else
{
int v = ss.top();
ss.pop();
cout << m_VerArr[v].m_value << " ";
p = m_VerArr[v].m_list;
while (p != nullptr)
{
m_VerArr[p->m_index].m_VerIn--;//入度--
if (m_VerArr[p->m_index].m_VerIn == 0)//如果它成为第一个了加到栈中
{
ss.push(p->m_index);
}
p = p->m_next;
}
}
}
}
}