做了好几道这类题了,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;
- }
-
相关阅读:
基于通用学习环境和多智能体深度强化学习的列车运行图
java计算机毕业设计景区在线购票系统源码+系统+mysql数据库+lw文档+部署
【OpenSSL】HMAC消息认证码
java读取文件
阿里云数据库大全_3分钟看懂阿里云RDS和NoSQL数据库汇总
vue 时间戳转日期格式
ubuntu 22.04 图文安装
【Java】多线程面试总结
还不懂Java线程池实现原理,看这一篇文章就够了
Hbase数据库安装部署
-
原文地址:https://blog.csdn.net/weixin_52030057/article/details/132919863