最短路算法(dijsktra,floyd)
2021/12/4 20:17:06
本文主要是介绍最短路算法(dijsktra,floyd),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
floyd,复杂度O(n^3)
void floyd(int s,int e)//start end { for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(g[i][j]>g[i][k]+g[k][j]) g[i][j]=g[i][k]+g[k][j]; } } } cout<<g[s][e]<<endl; }
dijsktra( O(mlogm) )
struct Node{ int to,dis; };//携带边的终边,长度信息 vector<Node> g[maxn]; void add(int u,int v,int w) { g[u].push_back({v,w}); } int dis[maxn];//最短路数组 typedef pair<int,int> P;//将int,int型数据重命名为P int dis[maxn];//最短路数组 typedef pair<int,int> P;//将int,int型数据重命名为P void dij(int start){ memset(dis,0x3f,sizeof(dis));//初始最短路为inf priority_queue<P,vector<P>,greater<P> > q;//小根堆,堆顶是最小值 dis[start]=0;//起点自己距离为0 q.push(P(0,start));//起点入队,注意pair数组第一个是距离,第二个是点号 while(!q.empty()){ P p=q.top(); q.pop();//取出堆顶 int u=p.second; if(dis[u]<p.first) continue; //祖传优化,同一点可能多次入队,如果答案更劣可以舍弃 for(int i=0;i<edge[u].size();i++){//邻接表遍历 int v=edge[u][i].to; if(dis[v]>dis[u]+edge[u][i].dis){//松弛 dis[v]=dis[u]+edge[u][i].dis;//成功了就更新,入队 q.push(P(dis[v],v)); } } } return ; }
这篇关于最短路算法(dijsktra,floyd)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-06vue 新建功能多条数据(还没和后端交互)还能看详情 数据是前端缓存到本地吗?-icode9专业技术文章分享
- 2024-05-30React Native常用组件-点击组件
- 2024-05-30uniapp+vue3+uv-ui手机端后台OA管理模板
- 2024-05-29Python网络爬虫的时候json=就是让你少写个json.dumps()
- 2024-05-27React Native常用组件-展示组件
- 2024-05-27React Native常用组件-列表组件
- 2024-05-09vue3开发前端表单缓存自定义指令,移动端h5必备插件
- 2024-05-09React Hooks在class组件中的使用方式
- 2024-03-30[OIDC in Action] 2. 基于OIDC(OpenID Connect)的SSO(纯JS客户端)
- 2024-03-29terraform jsonencode