0、定义
DAG:有向无环图
根据定义,可以得到以下两个结论:
- 如果图G中存在环(即G不是有向无环图),那么G不存在拓扑排序,反之如果G存在拓扑排序,则G中没有环
- 如果G是有向无环图,那么他的拓扑排序可能不止一种
- 能拓扑排序的图,一定是有向无环图
- 有向无环图,一定能拓扑排序
1、分页遍历所有任务,同时根据任务的依赖关系,生成dag图
@Data
public class TaskDagGraphBO {
private Set<Long> nodes = new HashSet<>();
private List<TaskDagEdge> edges = new ArrayList<>();
public TaskDagGraphBO() {
}
public TaskDagGraphBO(Long nodesSize) {
this.nodes = new HashSet<>(Integer.parseInt(nodesSize+""));
}
public void addNode(Long node) {
if(!this.nodes.contains(node)){
this.nodes.add(node);
}
}
public void addNodes(List<Long> nodes) {
this.nodes.addAll(nodes);
}
public void addEdge(Long from, Long to) {
Optional<TaskDagEdge> any = this.edges.stream().filter(e -> e.getFrom().equals(from) && e.getTo().equals(to)).findAny();
if(!any.isPresent()){
TaskDagEdge taskDagEdge = new TaskDagEdge(from, to);
this.edges.add(taskDagEdge);
}
}
public void remove(Long node) {
this.nodes.remove(node);
edges.removeIf(taskDagEdge -> taskDagEdge.getFrom().equals(node) || taskDagEdge.getTo().equals(node));
}
}
public class TaskDagEdge{
Long from;
Long to;
public TaskDagEdge(java.lang.Long start, java.lang.Long end) {
this.from = start;
this.to = end;
}
public Long getFrom() {
return (Long) from;
}
public void setFrom(Long from) {
this.from = from;
}


1878

被折叠的 条评论
为什么被折叠?



