Skip to content

Commit 82b3f5d

Browse files
committed
Create 2015-1-11-topsort.md
topological sorting code
1 parent 568de8e commit 82b3f5d

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

_posts/2015-1-11-topsort.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
layout: post
3+
title: Topological Sort (coffeescript)
4+
published: true
5+
category: nosql
6+
tags: [algorithm, maizi]
7+
---
8+
9+
{% highlight coffeescript %}
10+
# topological sort
11+
top_sort:()->
12+
result = [] #sort result
13+
14+
node_wrapers = {} #sorting data structure
15+
for node in @nodes
16+
node_wrapers[node.id] = #initialize the data stucture of each node
17+
node : node
18+
to : [] #the nodes that has an edge from this node
19+
visit: 0 #not visited
20+
for link in @links
21+
node_wrapers[link.source.id].to.push node_wrapers[link.target.id]
22+
23+
#visit function for top sort
24+
visit = (node)->
25+
if node.visit is 1 #has a temporary mark
26+
throw "Found a circle"
27+
if node.visit == 0
28+
node.visit = 1 #mark n temporarily
29+
for to_node in node.to
30+
visit to_node
31+
node.visit = 2 #mark n permanently
32+
result.push node.node
33+
34+
35+
for node_id, node of node_wrapers
36+
if(node.visit == 0)
37+
visit(node)
38+
return result
39+
40+
{% endhighlight %}

0 commit comments

Comments
 (0)