介绍见链接:http://baike.baidu.com/link?url=hA4jA5BlgtJd4ktn_bhjpR8ebKR6N7MYAP7L4oe5H8PL3sJr0XhI8hjpXd4IRw263LBm2vpUtbLFT3NQoSeava
原理讲解见这篇文章:http://blog.csdn.net/dm_vincent/article/details/7714519
实现有两种方法:
一种是从入度出发,代码如下:
1 #include2 #include 3 #include 4 using namespace std; 5 6 vector > eg[100]; 7 8 typedef pair pa; 9 10 //拓扑排序11 void topo(int n,int d)12 {13 queue setOfZeroIndegree;14 int degrees[100];15 queue result;16 17 //init18 for(int i = 0;i ";61 }62 cout< >n>>d;74 for(int i = 0;i >t>>s>>w;78 eg[t].push_back(make_pair(s,w));79 }80 topo(n,d);81 82 83 84 }85 /*86 6 887 0 1 288 0 3 489 1 4 490 2 0 591 2 5 292 3 4 393 3 5 794 5 4 395 */
还有一种是从出度入手,和DFS非常类似,见DFS算法