import java.util.HashMap;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.LinkedList;
public class Topo {
public class Node {
public int value;
public int in;
public int out;
public ArrayList<Node> nexts;
public ArrayList<Edge> edges;
Node(int valuse) {
this.value = valuse;
in = out = 0;
nexts = new ArrayList<Node>();
edges = new ArrayList<Edge>();
}
}
public class Edge {
public int weight;
public Node from;
public Node to;
Edge(int weight, Node from, Node to) {
this.weight = weight;
this.from = from;
this.to = to;
}
}
public class Graph {
public HashMap<Integer, Node> nodes;
public HashSet<Edge> edges;
Graph() {
nodes = new HashMap<Integer, Node>();
edges = new HashSet<>();
}
}
public static List<Node> sortedTopplogy(Graph graph) {
HashMap<Node, Integer> inMap = new HashMap<Node, Integer>();
Queue<Node> zeroInQueue = new LinkedList<Node>();
for (Node node : graph.nodes.values()) {
inMap.put(node, node.in);
if (node.in == 0) {
zeroInQueue.add(node);
}
}
List<Node> result = new ArrayList<>();
while (!zeroInQueue.isEmpty()) {
Node cur = zeroInQueue.poll();
result.add(cur);
for (Node next : cur.nexts) {
inMap.put(next, inMap.get(next) - 1);
if (inMap.get(next) == 0)
zeroInQueue.add(next);
}
}
return result;
}
}
拓扑排序法
最新推荐文章于 2024-07-12 15:51:39 发布