//带权有向图的最短路径算法:Dijkstra、Floyd(结果和输出分开)
//判断在给定有向图中是否存在一个有向回路
#include<set>
#include <iostream>
#define MAXE 100
#define MAXV 15
#define MAXWEIGHT 1000
#define INF 1000
using namespace std;
class graph
{
private:
int **matrix,*mark;
int vNum,eNum;
public:
graph(){};
graph(int v)
{
if(v>=MAXV) cout<<"construct false"<<endl;
vNum=v;
eNum=0;
mark=new int[vNum];
for(int i=0;i<vNum;i++)
mark[i]=0;
matrix=new int*[vNum];
int i,j;
for(i=0;i<vNum;i++)
matrix[i]=new int[vNum];
for(i=0;i<vNum;i++)
for(j=0;j<vNum;j++)
matrix[i][j]=INF;
}
void showEdge() //展示邻接矩阵
{
cout<<"邻接矩阵如下: "<<endl;
for(int i=0;i<vNum;i++)
for(int j=0;j<vNum;j++)
{
cout<<matrix[i][j]<<" ";
if(j==vNum-1) cout<<endl;
}
}
void resetMark() //重置节点标记数组
{
for(int i=0;i<vNum;i++)
mark[i]=0;
}
void setEdge(int start,int end,int weight)
{
if(weight>=MAXWEIGHT) return;
if(matrix[start][end]==0)
{
eNum++;
}
matrix[start][end]=weight;
}
int * * Dijkstra(int s) //Dijkstra:求点s到其余各点的最短路径
{
int n=vNum; //结点个数
int *d=new int[n]; //存放s到各个结点的路径长度(相对最短)(自身到自身为INF)
int *path=new int[n];
(c++)数据结构与算法之图:Dijkstra、Floyd算法、判断有向图回路
最新推荐文章于 2023-12-01 11:36:37 发布
本文介绍了如何使用C++实现数据结构与算法中的Dijkstra算法和Floyd算法,用于求解带权有向图的最短路径。同时,文章还提供了一个基于Floyd算法的函数,用于判断给定有向图中是否存在有向回路。通过实例展示了这两个算法的用法,并给出了具体代码实现。
摘要由CSDN通过智能技术生成