题解 | #最短路径问题#

最短路径问题

https://www.nowcoder.com/practice/e372b623d0874ce2915c663d881a3ff2

#include <iostream>
#include <queue>
#include <cstring>
#include <climits>
#include <vector>
using namespace std;
const int N=1002;
const int M=100002;
const int INF=INT_MAX;
//边
struct Edge{
   int to;
   int length;
   int price;
   Edge(int t,int l,int p):to(t),length(l),price(p){}
};
vector<Edge> graph[M];
//从原点到各点之间的距离
struct Point{
    int number; //点的编号
    int distance;
    Point(int n,int d):number(n),distance(d){}
    bool operator< (const Point& p)const{
        return distance > p.distance;
    }
};
int dis[N]; //n个顶点
int cost[M]; //每条边花费
void Dijkstra(int s){
    priority_queue<Point> pq;
    dis[s]=0;
    cost[s]=0;
    pq.push(Point(s,dis[s]));
    while(!pq.empty()){
        int u=pq.top().number;
        pq.pop();
        for(int i=0;i<graph[u].size();i++){  //遍历与u相邻的其他点
             int v = graph[u][i].to;
             int len = graph[u][i].length;
             int p=graph[u][i].price; 
             if(dis[v]>dis[u]+len || (dis[v]==dis[u]+len && cost[v]>cost[u]+p)){
                dis[v]=dis[u]+len;
                cost[v]=cost[u]+p;
                pq.push(Point(v,dis[v]));
             } 
        }
    }
    return;
}
int main() {
   int n,m,d,p,s,t;
   int a,b;
   while(cin>>n>>m){
    if(n==0 && m==0) break;
    memset(graph,0,sizeof(graph));
    fill(dis,dis+N,INF);
    fill(cost,cost+N,INF);
    for(int i=0;i<m;i++){
     cin>>a>>b>>d>>p;
     graph[a].push_back(Edge(b,d,p));
     graph[b].push_back(Edge(a,d,p));
    }
    cin>>s>>t;
    Dijkstra(s);
    printf("%d %d\n",dis[t],cost[t]);
   }
   return 0;
}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4337次浏览 75人参与
# AI面会问哪些问题? #
27981次浏览 558人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15262次浏览 221人参与
# 你的实习产出是真实的还是包装的? #
20248次浏览 342人参与
# 找AI工作可以去哪些公司? #
9200次浏览 237人参与
# 春招至今,你的战绩如何? #
65485次浏览 583人参与
# 米连集团26产品管培生项目 #
13363次浏览 285人参与
# 从事AI岗需要掌握哪些技术栈? #
9021次浏览 309人参与
# 中国电信笔试 #
32017次浏览 292人参与
# 你做过最难的笔试是哪家公司 #
33703次浏览 237人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340862次浏览 2175人参与
# 哪些公司真双非友好? #
69618次浏览 289人参与
# 阿里笔试 #
178666次浏览 1317人参与
# 机械人避雷的岗位/公司 #
62704次浏览 393人参与
# 小马智行求职进展汇总 #
25133次浏览 80人参与
# 第一份工作一定要去大厂吗 #
14702次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22097次浏览 280人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26258次浏览 310人参与
# 应届生第一份工资要多少合适 #
20690次浏览 86人参与
# 沪漂/北漂你觉得哪个更苦? #
9917次浏览 193人参与
# 聊聊你的职场新体验 #
336513次浏览 1895人参与
# HR最不可信的一句话是__ #
6300次浏览 114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务