import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
public class Main{
static Node[] node;
static ArrayList<Node> emptylist;//待处理的入度为0的点
static ArrayList<Node> restlist;//还未处理的节点
public static void main(String[] args){
HashMap<String,Integer> findnode = new HashMap();//记录节点名和数组位置的对应关系
node = new Node[100000];
//省略录入数据:包括 node[] HashMap初始化
/*
关键操作
*/
while(true){
if(emptylist.isEmpty())inquery();
if(emptylist.isEmpty()&&restlist.isEmpty()){
//输出 完全出队
break;
}else if(emptylist.isEmpty()&&!restlist.isEmpty()){
//输出 restlist.size() 为不能出队的数量
break;
}
for(int j=0;j<=emptylist.get(0).out.size()-1;j++){
node[emptylist.get(0).out.get(j)].in--;
}
emptylist.remove(0);
}
}
static void inquery(){//检查空队列把空的都入队
for(int i=0;i<=restlist.size()-1;i++){
if(restlist.get(i).in==0){
emptylist.add(restlist.get(i));
restlist.remove(i);
}
}
}
static class Node{
int in;//入度
String name;//节点名
LinkedList<Integer> out;//指向
Node(String name){
this.in = 0;
this.name = name;
out = new LinkedList();
拓扑排序——JAVA ACM模板
最新推荐文章于 2025-05-26 17:19:48 发布