深度优先实现拓扑排序--java

该博客介绍了如何使用Java实现深度优先搜索进行拓扑排序。通过创建一个图,初始化节点和边,然后从入度为0的节点开始遍历,处理前驱节点并将其加入队列,最终输出拓扑排序的结果。示例代码展示了完整的拓扑排序过程。
摘要由CSDN通过智能技术生成
import java.util.*;
public class Topology
{	
	static final int MAX = 20;	//最大点数
	static int[][] g; //图
	static LinkedList<Integer> queue; //保存排序结果
	static int[] ingoing; //记录节点入度
	static int[] outgoing;//记录节点出度
	static int[] used;
	static int ver;
	static int edge;

	static void tplgOrd(){
		//从所有出度为0的点开始遍历
		for(int i=1;i<=ver;i++){
			if(outgoing[i] == 0)
				helper(i);
		}
	}
	
	static void helper(int index){
		//入度为0,说明没有先驱节点了
		if(ingoing[index]==0) {
			if(used[index]==0){used[index] = 1;queue.addLast(index);}
			return;
		}
		//有边指向当前节点说明还有前驱节点,处理前驱节点
		for(int i = 1;i <= ver;i++){
			if(g[i][index] < Integer.MAX_VALUE)	//有边相连
				helper(i);
		}
		//到这里一定是所有的前驱节点都处理过了,所以只要把当前节点加入队列即可。
		if(used[index] == 0){
			used[index] = 1;
			queue.addLast(index);
		}
	}
	
	static void init(){
		g = new int[ver+5][ver+5];
		queue = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值