数据结构与算法C++实现------图的邻接表构建,拓扑排序及关键路径

本文介绍了如何使用C++构建图的邻接表,详细讲解了邻接表构造函数,并探讨了拓扑排序和关键路径的计算方法。在main函数中设置初始参数,以求解事件的最早和最迟发生时间以及活动的最早和最晚开始时间。
摘要由CSDN通过智能技术生成

文章目录

前言

通过邻接表实现图的关键路径,包含是事件最早发生时间ve,事件最迟发生时间vl,活动最早开始时间ee,活动最晚开始时间el



一、图的构建

实现构造邻接表,测试(显示邻接表),拓扑排序,得到关键路径

const int MAX_VERTEX = 30;//图的最大顶点数

struct ArcNode//边表
{
	int weight;//增加权值分量,代表活动时间
	int adjvex;
	ArcNode* next;
};

struct VertexNode//顶点表
{
	int in;//增加入度
	string vertex;
	ArcNode* firstEdge;
};

class ALGraph//邻接表
{
private:
	VertexNode* adjList;//创建顶点表
	int vertexNum,arcNum;
	int* ve, * vl;//ve数组是事件最早发生时间,vl数组是事件最迟发生时间
public:
	ALGraph(string v[], int n, int e);//构造
	~ALGraph();
	void inputEdges();//输入图信息
	bool setEdge(int vi, int vj, int weight);//插入边表,判断输入顶点及边
	void displayDate();//显示图的信息

	bool TopologicalSort(int result[], int& count);//拓扑排序  //result数组用来保存处理过的拓扑排序序列顶点;count用来保存处理过的拓扑排序顶点个数
	bool CriticalPath();//求关键路径
};


二、邻接表构造函数


注意析构函数中,对new创建出的数据进行释放

ALGraph::ALGraph(string v[], int n, int e)//初始化邻接表
{
	vertexNum = n;
	arcNum = e;
	adjList = new VertexNode[vertexNum];
	for (int i = 0; i < vertexNum; i++)
	{
		adjList[i].in = 0;//入度为0
		adjList[i].vertex = v[i];
		adjList[i].firstEdge = NULL; 
	}
	ve = new int[vertexNum];
	vl = new int[vertexNum];
}

void ALGraph::inputEdges()
{
	cout << "请输入两个事件顶点编号范围0-" << vertexNum - 1 << ")和活动时间:" <&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值