最短路径
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 · 144 阅读 · 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 · 169 阅读 · 0 评论 -
1030 Travel Plan (30分)
法一:Dijkstra#include<iostream>#include<cstring>#include<algorithm>#define mm(a,x) memset(a,x,sizeof(a))#define inf 0x3f3f3f3fconst 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 · 131 阅读 · 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 · 523 阅读 · 0 评论