拓扑排序的算法模板

简单介绍一下拓扑排序把。拓扑排序其实不是一种排序而是一种前后关系的输出。拓扑排序输出序号的规则(拓扑排序的实现),首先我们找到入度为0的点,然后把它输出并删掉,之后把与他直接相连的点的入度减去1,并找到入度为0的点,接着把这个输出并删除。之后把与他相连的点的入度减去1.直到把所有点输出为止。拓扑排序要求点与点之间有前后关系,并且图不能有环。

那么我们来说说它的作用吧

拓扑排序其实可以找到到达一个点共有几种路径。原理就是我们首先找到一个入度为0的点,它前面没有任何其他点,因为入读为0吗。所以它肯定是起点。由于我们在删除这个点时会删除与他直接相连的边,而每一条边都是一条路径,所以我们把起点赋值为1代表从起点开始只有一条路径,之后每删一条边时我们便在这条被删的边的另一个点加上前一个点的路径数。

最后我们输出终点的路径数

下面给出模板并解释


import java.awt.FontFormatException;
import java.io.BufferedReader; 
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.AnnotatedWildcardType;
import java.math.BigInteger;
import java.net.DatagramPacket;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Objects;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Spliterator.OfPrimitive;
import java.util.function.IntToDoubleFunction;
import java.util.function.LongBinaryOperator;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.management.relation.InvalidRelationTypeException;
import javax.print.attribute.standard.JobMessageFromOperator;
import javax.print.attribute.standard.JobPriority;
import javax.swing.plaf.ColorChooserUI;
import javax.swing.table.TableModel;
import javax.swing.text.TabSet;
import javax.xml.crypto.dsig.spec.DigestMethodParameterSpec;
public class Main {
  public static void main(String[] args) throws IOException  {
Scanner sc=new Scanner(System.in);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw1=new PrintWriter(System.out);
String[] aStrings=br1.readLine().split(" ");
int a=Integer.parseInt(aStrings[0]);

int b=Integer.parseInt(aStrings[1]);
int c;
for(c=1;c<=a;c++) {
	al1[c]=new ArrayList<>();
}
for(c=0;c[] al1=new ArrayList[bb];//用来存放与这个点直接相连的点
  public static PriorityQueue pq1=new PriorityQueue<>();//放置入度为0的点
		  
 }
 

P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

模板对应的题目

你可能感兴趣的:(图论,算法,java,拓扑排序)