#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);//无向图
有向无环图的单源最短路径问题
最新推荐文章于 2021-02-13 06:21:34 发布
本文介绍了如何利用有向无环图(DAG)进行单源最短路径的求解。通过定义边结构体、顶点结构体以及图类,实现了添加边、拓扑排序、计算入度以及单源最短路径等功能。最后展示了通过输入顶点个数和邻接表创建有向图,并输出从源点到所有其他顶点的最短路径长度和具体路径。
摘要由CSDN通过智能技术生成