Topological Sort:
如果圖是有迴路的,就不可能存在拓撲排序後的線性序列。一個圖的拓撲排序可以看成是圖中所有頂點沿水平線排列而成的一個序列,使得所有的有向邊均從左指向右。
時間複雜度: O(V+E)
模板:
#define NODE_SIZE 500
#define EDGE_SIZE (NODE_SIZE*NODE_SIZE)
struct Edge {
int to;
int next;
Edge() {
to = next = -1;
};
}edge[EDGE_SIZE];
int indegree[NODE_SIZE];
int head[NODE_SIZE];
void StoreEdge(int from, int to) {
static int edge_len = 0;
edge[edge_len].next = head[from]; edge[edge_len].to = to; head[from] = edge_len++;
++indegree[to];
}
bool TopSort( int topQueue[], int node_size ) {
int cnt = 0;
int tmp;
queue<int> que;
for(int i = 1 ; i <= node_size ; ++i ) {
if( !indegree[i] ) {
que.push( i );
}
}
while( !que.empty() ) {
tmp = que.front();
topQueue[cnt++] = tmp;
que.pop();
for(int i = head[tmp] ; i != -1 ; i = edge[i].next ) {
--indegree[edge[i].to];
if( !indegree[edge[i].to] )
{ que.push( edge[i].to ); }
}
}
if( cnt >= node_size )
{ return true; }
else
{ return false; }
return false;
}