做了好几道这类题了,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;
- }
-
相关阅读:
解决 Github port 443 : Timed out
记录-2023/11/18
重温文件操作(一)
聊聊ChatGLM-6B源码分析(二)
NLP - 数据预处理 - 文本按句子进行切分
消费品企业会员运营系统 品牌会员流失解决方案
33、CSS进阶——布局
C#:实现权重轮询调度算法(附完整源码)
盘点JAVA中延时任务的几种实现方式
.net core 3.0 + angular 8.0 ----项目创建过程
-
原文地址:https://blog.csdn.net/weixin_52030057/article/details/132919863