dijkstra(堆优化版):从边的数量出发,采用邻接表存储图:vector<list<pair<int,int>>> grid(n + 1);构建小顶堆来直接选最近结点(不需要循环),优先级队列中存放pair<结点编号,结点到起点的距离>,使用vector<pair<int, int>>作为底层容器,并通过mycomparison类来比较元素;priority_queue<pair<int,int>, vector<pair<int,int>>, mycomparison> pq;时间复杂度:O(ElogE) E 为边的数量Bellman_ford 算法:求带负权值的单向最短路,dijkstra算法只能求权值为非负数的最短路问题。思路:对所有边松弛 n-1 次,然后得出得到终点的最短路径。对所有边松弛一次,相当于计算 起点到达 与起点一条边相连的节点 的最短距离,松弛就是一次去获取到该结点的最短路径的尝试,因为给出的边规定了哪个结点到哪个结点有路,这说明某次的松弛操作不一定能真正实行,可能起点到某条边的出发结点还未找到最短路,所以要松弛n-1次,才能最终得到起点到终点的最短路。// 松弛操作 // minDist[from] != INT_MAX 防止从未计算过的节点出发if (minDist[from] != INT_MAX &amp;&amp; minDist[to] > minDist[from] + price) { minDist[to] = minDist[from] + price; }时间复杂度: O(N * E) , N为节点数量,E为图中边的数量