做了好几道这类题了,dijkstra单源最短路径一气呵成
- #include
- #include
- #include
- #define MAXN 510
- using namespace std;
-
- int road[MAXN][MAXN];
- int cost[MAXN][MAXN];
- int vis[MAXN],roadMin[MAXN],costMin[MAXN];
- vector<int> pre[MAXN];
- const int inf=8989898;
- int main(){
- int n,m,s,d;//编号0到n-1
- cin>>n>>m>>s>>d;
- //初始化
- for(int i=0;i
- for(int j=0;j
- if(i!=j){
- road[i][j]=inf;cost[i][j]=inf;
- }
- roadMin[i]=costMin[i]=inf;
- }
- }
- for(int i=0;i
- int a,b,len,c;
- cin>>a>>b>>len>>c;
- road[a][b]=road[b][a]=len;
- cost[a][b]=cost[b][a]=c;
- }
- //计算
- roadMin[s]=0,costMin[s]=0;
- for(int i=0;i
- int u=-1,temp=inf;
- for(int j=0;j
- if(roadMin[j]
- u=j;
- temp=roadMin[j];
- }
- }
- if(u==-1)break;
- vis[u]=1;
- //更新
- for(int v=0;v
- if(!vis[v]&&roadMin[u]+road[u][v]
- roadMin[v]=roadMin[u]+road[u][v];
- pre[v].clear();pre[v].push_back(u);
- costMin[v]=costMin[u]+cost[u][v];
- }
- else if(!vis[v]&&roadMin[u]+road[u][v]==roadMin[v]){
- if(costMin[u]+cost[u][v]
- pre[v].clear();pre[v].push_back(u);
- costMin[v]=costMin[u]+cost[u][v];
- }
- }
- }
- }
- //输出答案
- int t=d;
- vector<int>ans;
- ans.push_back(d);
- while(s!=d){
- d=pre[d][0];
- ans.push_back(d);
- }
- for(int i=ans.size()-1;i>=0;i--)cout<
" "; - cout<
" "< - return 0;
- }
-
相关阅读:
blender3.3下载安装(Windows)
《Java编程思想》读书笔记(五)
猿创征文 |【C++】面向对象之微观部分——类的组成(下)
亚马逊一分钟1000+的僵尸链接获取只需三步
【电力系统】基于粒子群算法优化电力系统潮流计算附matlab代码
【giszz笔记】产品设计标准流程【8】
简单聊一聊公平锁和非公平锁,parallel并行流
vue之@click绑定的函数,如何实现加不加括号都可执行
AR工业远程巡查系统:实时监控设备状态,及时发现潜在问题
【UML用户指南】-01-UML基本元素的介绍(一)
-
原文地址:https://blog.csdn.net/weixin_52030057/article/details/132919863