有向无环图的单源最短路径问题

本文介绍了如何利用有向无环图(DAG)进行单源最短路径的求解。通过定义边结构体、顶点结构体以及图类,实现了添加边、拓扑排序、计算入度以及单源最短路径等功能。最后展示了通过输入顶点个数和邻接表创建有向图,并输出从源点到所有其他顶点的最短路径长度和具体路径。
摘要由CSDN通过智能技术生成
#include<iostream>
#include<fstream>
#include<stack>
#include<queue>
using namespace std;
//定义边结构体类型
struct Edge
{
	int start;//一条边的起始顶点编号
	int end;//一条边的终止顶点编号
	int value;//边的权值
	Edge* next;//第start起点的链表的下一条边
	Edge(int s,int e,int v):start(s),end(e),value(v),next(NULL){}
};
//定义顶点结构体类型
struct Vertex
{
	int d;//点到源点之间的距离
	int indegree;//顶点的入度
	int Pie;//点的前驱点
	Edge* head;
	Vertex():head(NULL),d(0x7fffffff),Pie(0){}
};
//定义图类
class graph
{
private:
	int n;//顶点个数
	queue<int> Q;//拓扑排序队列
	Vertex *V;//邻接链表,相当于动态数组Vertex V[n+1];V[1].head代表编号为1的点的链表,head为链表的第一个结点,每个结点代表一条边有start和end
public:
	graph(int num):n(num){V=new Vertex[n+1];}//构造函数,初始化
	~graph(){delete []V;}//析构函数
	void creatDirectedGraph();//创建有向图
	void creatUndirectedGraph();//创建无向图
	void addSingleEdge(int start,int end,int value);//把当前边(start,end)插入到编号为start的点的链表中,有向图边的插入
	void addDoubleEdge(int start,int end,int value);//无向图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值