拓扑排序 + 关键路径(邻接矩阵实现)

本文详细介绍了拓扑排序的概念及其在邻接矩阵中的实现方法,同时探讨了如何利用拓扑排序求解关键路径问题。通过实例分析,帮助读者深入理解这两种算法在实际应用中的价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<stack>
#define INF 65535
using namespace std;
int map[110][110];   //构建邻接表 
int ear[110],in[110],late[110];  //构建最早出发表和最晚完成表 
int n,m,MAX;
stack<int>Turn;      //存放拓扑排序的顺序,最晚完成的在栈顶,最早完成的在栈底 
void init(){
	for(int i = 1;i <= n;i++)
	{
		for(int j = 1;j <= n;j++)
		map[i][j] = -INF;
		ear[i] = -INF;
		
	}
	MAX = -INF;
}
bool Topsort(){   //拓扑排序 
	stack<int> in_null;   //存放入度为0的节点 
	int cnt = 0;
	for(int i = 1;i <= n;i++){
		if(in[i] == 0)in_null.push(i);
		ear[i] = 0;cnt++;
	}
	while(!in_null.empty()){
		int index = in_null.top();in_null.pop();cnt++;
		Turn.push(index);
		for(int i = 1;i <= n;i++)
		if(map[index][i] != -INF){
			in[i]--;
			if(in[i] == 0)in_null.push(i);//入读为0进行入栈 
			if(ear[i] < ear[index] + map[index][i])ear[i] = ear[index] +
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值