Ниже мое чтение алгоритма топологической сортировки в очереди, записанное в моем учебнике:
void topologicalsort(struct Graph* G){
struct queue* Q;
int counter;
int v,w;
Q=createqueue();
counter=0;
for(v=0;v<G->V;v++){
if(indegree[v]==0)
enqueue(Q,v);
while(!isemptyqueue(Q)){
v=dequeue(Q);
topologicalorder[v]=++counter;
for each w to adjacent to v
if(--indegree[w]==0){
enqueue(Q,w);
}
}
}
}
Алгоритм не работает для следующего графика:
![graph the algorithm fails on](https://i.stack.imgur.com/cHZ7U.jpg)
Если в данном графе изначально 7 5 3 имеет ноль градусов, то они будут вставлены в очередь, но для любой из вершин, смежных с 7 5 3
, у нас нет какой-либо вершины со степенью 1. Это означает, что if(--indegree[w]==0)
не будет выполняться для 7 5 3
, следовательно, дальнейшая постановка в очередь не будет выполняться, и, следовательно, алгоритм не будет обрабатывать дальнейшие вершины. Я хотел бы знать, почему происходит сбой алгоритма, если граф является DAG? Каким образом это неверно?
Я знаю, что мы также можем реализовать топологическую сортировку с использованием DFS, но я хочу реализовать следующее как есть:
![the pseudocode of the algorithm I want to implement](https://i.stack.imgur.com/86vI3.jpg)