1.适用前提:
图,有向图,且有入度为0的节点,没有环
2.方法
以入度为0的节点为基准,在选出入度为0的节点后,消除此节点对其他节点的影响(连接此节点的节点的入度减一)继续寻找入读为0的节点,重复上述过程,指导没有节点。
3.思路一
1.建立一个hashmap键为节点,值为此节点的入度,分别用来存放节点与节点入度。
2.建立队列用来存放入度为0的节点,先为0先入(顺序)
3.入队列后,遍历入队列的节点的下个节点,在hashmap中找到这些节点后对他们的入度减一。
4.入度为0的节点放入对列.
5.重复3,4
4.示例代码
public static List<node> pp(Graph graph)
{
HashMap<Node,Integer> map = new HashMap<>();//键:节点,值:节点入度
Queue<Node> queue = new LinkedList<>();
for(Node node : graph.nodes.values())
{
map.put(node,node.in);//键:节点,值:节点入度
if(node.in==0) queue.add(node);
}
//结果
List<Node> result = new ArrayList<>();
while(!queue.isEmpty()){
Node n = queue.poll();
result.add(n);
for(Node next : n.nexts//找下一个节点的函数){
map.put(next,map.get(next)-1);
if(map.get(next)==0) queue.add(next);
}
}
return result ;
}