严蔚敏《数据结构》 迪杰斯特拉算法

        迪杰斯特拉算法是在有向网中实现某一单源节点到其他各节点最短路径的算法。

        其基本思想采用了贪心算法的思想,即每次循环过程中选出起始节点到其余各节点中路径最短的节点,然后借助被选出的节点,更新剩余节点的路径长度,依次循环下去,直到所有节点都被选出。算法代码如下:

void Shortest_DIJ(AMGraph G,int v0)
{
	int w,v;
	for(v=0;v

       (笔者发布文章之前又在VS上测试了一下,发现算法出现爆栈的警告,文章发布前还没有想解决的办法,以上代码仅供参考)

        运行所采用的图也是书上所给出的图

 严蔚敏《数据结构》 迪杰斯特拉算法_第1张图片

         完整代码如下:

#include
#include
#include
#include
#define MaxInt 0x3f
using namespace std;
const int MVNum=100;   //最大顶点数 
int S[100];  //记录相应顶点是否已确定最短路径
int D[101];  //记录相应顶点路径长度
int Path[100];  //记录相应顶点的前驱顶点 
class AMGraph
{
public:
    AMGraph(int n,int e);
    int arcs[MVNum][MVNum];   //邻接矩阵 
    int vexnum,arcnum;     //当前点和边数 
};
AMGraph:: AMGraph(int n,int e)   //邻接矩阵构造有向网 
{
    vexnum=n;
    arcnum=e;
    int v1,v2,w;
    for(int i=0;i>v1>>v2>>w;
        arcs[v1][v2]=w;
    }
}

void Shortest_DIJ(AMGraph G,int v0)
{
    int w,v;
    for(v=0;v>n>>e;
     AMGraph G(n,e);
     cout<<"请输入源点"<>v0;
     Shortest_DIJ(G,v0);
     return 0;
 }

本文是笔者学习严蔚敏老师的《数据结构》后所写的文章,因此代码大部分都源于书上的伪代码。写的初衷也只是记录一下,方便日后温习使用。文章仅供参考,不足之处还请各路大神指点。 

你可能感兴趣的:(数据结构,c++)