数据结构-图的最短路径之Djikstra算法(迪杰斯特拉算法)
一. Djikstra算法定义 形式: 用来解决单源最短路径的问题,即给出图G和起点s,通过算法到达每个顶点的最短距离。 基本思想: 对图G(V, E)设置集合S, 存放已被访问的顶点,然后每次从集合V-S中选择与起点s的最短距离最小的一个顶点u,访问并加入集合S。之后,令顶点u为中介点, 优化起点和所有的从u能到达的顶点v之间的最短距离。这样的操作执行n(顶点的个数)次。 伪代码: //G为图, 一般设置为全局变量,数组d为源点到达各点的最短路径长度,s为起点 Djikstra(G, d[], s){ 初始化 for(循环n次){ u = 是d[u]最小的还未被访问的顶点的标号 记u已被访问 for(从u出发能到达的所有顶点v){ if(v未被访问&&以U为中介使得s到顶点v的最短距离d[v]更优){ 优化d[v] } } } } 二、具体实现 1. 邻接矩阵版 const int MAXV = 1000;//最大顶点数 const int INF = 10000000000;//设INF为一个很大数 //适用于点数不大的情况 int n, G[MAXV][MAXV]; int d[MAXV]; bool vis[MAXV]; void Dijkstra(int s){ fill(d, d+MAXV, INF); d[s] = 0; for(int i = 0; i < n; i