1. 定义
- 一种图论算法
- 只有有向无环图(Directed Acyclic Graph,简称DAG )才有拓扑排序
- DAG必至少有一个入度为零的点和一个出度为零的点
2. 有向无环图实现(模拟LinkedList:邻接表)
class LinkedList{
constructor(data){
this.data = data
this.arr = []
}
addPoint(val){
this.arr.push(val)
}
}
class Graph{
constructor(list, inverse){
this.arr = []
this.dict = {
}
for(let [x,y] of list){
this.addEdge(x,y,inverse)
}
}
addEdge(x, y, inverse){
let {
arr, dict} = this
let xLinkList
let yLinkList
if(dict[x]){
xLinkList = arr[dict[x]]
}else{
dict[x] = arr.length.toString()
xLinkList = new LinkedList(x)
arr.push(xLinkList)
}
if(dict[y]){
yLinkList = arr[dict[y]]
}else{
dict[y] = arr.length.toString()
yLinkList = new LinkedList(y)
arr.push(yLinkList)
}
if(inverse){
yLinkList.addPoint(xLinkList)
}else{
xLinkList.addPoint(yLinkList)
}
}
}
var list = [
['A','B'],
['B',