方法如下:
(1)从有向图中选择一个入度为0的顶点并输出他
(2)从图中删去该顶点,并且删去从该顶点出发的所有边
(1)从有向图中选择一个入度为0的顶点并输出他
(2)从图中删去该顶点,并且删去从该顶点出发的所有边
(3)重复(1)(2)当前有向图中不存在没有前驱(入度为0)结点的顶点为止,或者当前有向图的中的所有顶点以输出为止
typedef struct
{
char data;
int indegree;
Next *first;
}Node;
typedef struct
{
int index;
Next *next;
}Next;
typedef struct v
{
Node node[1000];
int vexnum;
}ALGraph;
bool topoLogicalSort(ALGraph g)
{
vector<int> indegree;
stack<Node> s;
for(int i = 0; i < g.vexnum; i++)
if(g.node[i].indegree == 0)
s.push(g.node[i]);
int count = 0;
while(!s.empty())
{
Node t = s.top();
cout << t.data << " -> ";
count++;
s.pop();
for(Next * p = t.first; p; p = p->next)
{
g.node[p->index].indegree--;
if(g.node[p->index].indegree == 0)
s.push(g.node[p->index]);
}
}
if(count < g.vexnum)
return false;
else return true;
}