代码随想录 打卡第五十八天

卡码网 47 参加科学大会 Dijkstra算法(堆优化)

cpp 复制代码
#include<iostream>
#include<vector>
#include <list>
#include <climits>
#include <queue>
using namespace std;
struct Edge{
    int to;
    int val;

    Edge(int t, int w): to(t), val(w) {} ;
};

struct comparion{
    bool operator ()(const pair<int, int>& a,const pair<int, int>& b) {
        return a.second > b.second;
    }
};

int main(){
    int n,m;
    cin >> n >> m;
    vector<list<Edge>> graph(n+1);
    int x,y,w;
    for(int i = 0;i < m;i++){
        cin >> x >> y >> w;
        graph[x].push_back(Edge(y,w));
    }
    
    vector<bool> visit(n+1,false);
    vector<int> mindistance(n+1,INT_MAX);
    mindistance[1] = 0;
    priority_queue<pair<int, int>,vector<pair<int, int>>,comparion> que;
    
    que.push(pair<int, int>(1,0));
    while(!que.empty()){
        pair<int, int> cur =  que.top();
        que.pop();
        
        visit[cur.first] = true;
        for(Edge edge : graph[cur.first]){
            if(!visit[edge.to] && mindistance[cur.first] + edge.val < mindistance[edge.to]){
                mindistance[edge.to] = mindistance[cur.first] + edge.val;
                que.push(pair<int,int>(edge.to,mindistance[edge.to]));
            }
        }
    }

    int result = mindistance[n] == INT_MAX ? -1 : mindistance[n];
    cout << result;
    return 0;
}

卡码网 94 城市间货物运输 I Bellman-ford算法

cpp 复制代码
#include<iostream>
#include<vector>
#include <climits>
using namespace std;

int main(){
    int n,m;
    cin >> n >> m;
    vector<vector<int>> graph;
    int x,y,w;
    for(int i = 0;i < m;i++){
        cin >> x >> y >> w;
        graph.push_back({x,y,w});
    }

    vector<int> mindistance(n+1,INT_MAX);
    mindistance[1] = 0;
    for(int i = 0;i < n;i++){
        for(vector<int>& side : graph){
            int from = side[0];
            int to = side[1];
            int val = side[2];
            if(mindistance[from] != INT_MAX && mindistance[from] + val < mindistance[to]){
                mindistance[to] = mindistance[from] + val;
            }
        }
    }
    if(mindistance[n] == INT_MAX) cout << "unconnected" << endl;
    else cout << mindistance[n] << endl;

    return 0;
}
相关推荐
c238567 分钟前
互斥锁高频面试题全解:从基础概念到底层实现,一文通关
java·c++·面试·职场和发展
北冥you鱼16 分钟前
Go 语言读取链上数据:从基础到实战
开发语言·后端·golang
nianniannnn17 分钟前
c++复习自存--继承
开发语言·c++
kebidaixu40 分钟前
两轮BMS 防打火策略详解
算法
wabs6661 小时前
关于动态规划【力扣1035.不相交的线和53.最大子数组和的思考】
算法·leetcode·动态规划
退休倒计时1 小时前
【每日一题】LeetCode 199. 二叉树的右视图 TypeScript
算法·leetcode·typescript
可编程芯片开发1 小时前
通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器
算法
叩码以求索1 小时前
经典算法实例分析:写字符串需要的行数
开发语言·javascript·ecmascript
我是唐青枫2 小时前
Kotlin 运算符重载详解:为什么 a += b 有时改对象,有时换对象?
开发语言·kotlin
2zcode2 小时前
基于MATLAB图像处理的饮料瓶识别与价格显示系统设计与实现
开发语言·图像处理·matlab