做了好几道这类题了,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;
- }
-
相关阅读:
antv/x6 键盘快捷键事件
一条merge实现插入或更新
智慧工地:助力数字建造、智慧建造、安全建造、绿色建造
CloudKit提示Permission Failure:Invalid bundle ID for container 错误的超详细解决
基于springboot实现多线程抢锁的demo
Python数据容器
【预测模型-DELM分类】基于风驱动算法改进深度学习极限学习机实现数据分类附matlab代码
【ESP8266开发备忘】
智云通CRM:如何巧妙地满足客户的价格需求?
树莓派i2c通讯 设置 和 查看 i2c通信地址方法
-
原文地址:https://blog.csdn.net/weixin_52030057/article/details/132919863