#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] +
拓扑排序 + 关键路径(邻接矩阵实现)
最新推荐文章于 2022-03-27 21:39:37 发布