![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
最短路径
author:vehicel
description :最短路径
chstor
努力学好英语的菜狗
展开
-
Floyd算法(多源最短路)
求任意两点u,v之间的最短路径长度,时间复杂度是O(n^3),顶点数在200以内,邻接矩阵实现(方便) Floyd算法描述: 枚举顶点k在1~n 以顶点k作为中介点,枚举所有顶点对i和j(i在1~n,j在1~n) 如果dis[i][k]+dis[k][j]<dis[i][j]成立 赋值 dis[i][k]+dis[k][j]=dis[i][j] Floyd的核心代码: void floyd(){ int i,j,k; for(int k=1;k<=n;k++){ for(int i=1原创 2020-06-06 10:19:29 · 134 阅读 · 0 评论 -
Dijkstra+DFS优化
记录第一标尺的pre[] pre[]不用初始化 每次找到最优的前驱时都会清空pre[v] 记录路径需要把中间点u录入后面 if(dist[u]+map[u][v]<dist[v]){ dist[v]=dist[u]+map[u][v]; pre[v].clear(); pre[v].push_back(u); }else if(dist[u]+map[u][v]==dist[v]){ pre[v].push_back(u); } DFS递归函数来解决第二标尺: 作为全局变量的第二标尺最原创 2020-06-05 16:06:34 · 155 阅读 · 0 评论 -
1030 Travel Plan (30分)
法一:Dijkstra #include<iostream> #include<cstring> #include<algorithm> #define mm(a,x) memset(a,x,sizeof(a)) #define inf 0x3f3f3f3f const int maxn =510; using namespace std; int n,m,s,d; int map[maxn][maxn]; int dist[maxn]; int cost[maxn]原创 2020-06-05 16:05:48 · 105 阅读 · 0 评论 -
最短路径---Dijkstra算法(单源+边权非负数)
Dijkstra算法(迪杰斯特拉算法)用来解决单源最短路问题 如果边权出现负数,用SPFA 算法 可以用STL的优先队列priority_queue来优化 Dijkstra伪代码: //G为图,一般设为全局变量,数组d为源点到达各点的最短路径长度,s为起点 Dijkstra(G,d[],s){ 初始化; for(循环n次){ u=使d[u]最小的还未被访问的顶点的标号; 记u已被访问; for(从u出发能到达的所有顶点v){ if(v未被访问&&以u为中介点使s到顶原创 2020-06-04 10:37:29 · 497 阅读 · 0 评论