dijkstra算法复习

dijkstra算法之前一直没有动手写,经过几次笔试之后,发现对这类问题不是很熟练。今天仔细研究了一下该算法的代码。用一种比较容易理解的方式给code出来。
首先,最直观的表示一个图的方法就是用邻接矩阵,虽然邻接矩阵效率不高,本代码中采用这种方法。
其次,C++中优先队列的使用需要重载<操作符。
最后,并没有对代码进行任何优化,所以十分容易理解。

#include <bits/stdc++.h>
using namespace std;
const int N = 6;
int mat[6][6] = {
        {0, 7, 9, INT_MAX, INT_MAX, INT_MAX},
        {7, 0, 10, 15, INT_MAX, INT_MAX},
        {9, 10, 0, 11, INT_MAX, 2},
        {INT_MAX, 15, 11, 0, 6, INT_MAX},
        {INT_MAX, INT_MAX, INT_MAX, 6, 0, 9},
        {INT_MAX, INT_MAX, 2, INT_MAX, 9, 0},
};
struct node{
    int id, w;
    bool operator < (const node &rhs) const {
        return w < rhs.w;
    }
};
int dis[N];
int main(){
    priority_queue<node> q;
    for(int i = 0; i < N; i++) dis[i] = INT_MAX;
    dis[0] = 0;
    q.push(node({0, 0}));
    while(!q.empty()){
        node x = q.top(); q.pop();
        for(int i = 0; i < N; i++) {
            if(mat[x.id][i] != INT_MAX && dis[i] > x.w + mat[x.id][i]) {
                dis[i] = x.w + mat[x.id][i];
                q.push(node({i, dis[i]}));
            }
        }
    }
    for(int i = 0; i < N; i++) {
        cout << dis[i] << " ";
    }
    return 0;
}

唯一稍微不是十分直观的地方在第29行。代码中并没有在一开始就把除源点之外的所有点都放进优先队列里,而是每次找到最小的扩展点的时候,通过扩展点能缩短距离的那些边给放进优先队列里。

#笔试题目##秋招#
全部评论

相关推荐

Tom哥981:让我来压力你!!!: 这份简历看着“技术词堆得满”,实则是“虚胖没干货”,槽点一抓一大把: 1. **项目描述是“技术名词报菜名”,没半分自己的实际价值** 不管是IntelliDoc还是人人探店,全是堆Redis、Elasticsearch、RAG这些时髦词,但你到底干了啥?“基于Redis Bitmap管理分片”是你写了核心逻辑还是只调用了API?“QPS提升至1500”是你独立压测优化的,还是团队成果你蹭着写?全程没“我负责XX模块”“解决了XX具体问题”,纯把技术文档里的术语扒下来凑字数,看着像“知道名词但没实际动手”的实习生抄的。 2. **短项目塞满超纲技术点,可信度直接***** IntelliDoc就干了5个月,又是RAG又是大模型流式响应又是RBAC权限,这堆活儿正经团队分工干都得小半年,你一个后端开发5个月能吃透这么多?明显是把能想到的技术全往里面塞,生怕别人知道你实际只做了个文件上传——这种“技术堆砌式造假”,面试官一眼就能看出水分。 3. **技能栏是“模糊词混子集合”,没半点硬核度** “熟悉HashMap底层”“了解JVM内存模型”——“熟悉”是能手写扩容逻辑?“了解”是能排查GC问题?全是模棱两可的词,既没对应项目里的实践,也没体现深度,等于白写;项目里用了Elasticsearch的KNN检索,技能栏里提都没提具体掌握程度,明显是“用过但不懂”的硬凑。 4. **教育背景和自我评价全是“无效信息垃圾”** GPA前10%这么好的牌,只列“Java程序设计”这种基础课,分布式、微服务这些后端核心课提都不提,白瞎了专业优势;自我评价那堆“积极认真、细心负责”,是从招聘网站抄的模板吧?没有任何和项目挂钩的具体事例,比如“解决过XX bug”“优化过XX性能”,纯废话,看完等于没看。 总结:这简历是“技术名词缝合怪+自我感动式凑数”,看着像“背了后端技术栈名词的应届生”,实则没干货、没重点、没可信度——面试官扫30秒就会丢一边,因为连“你能干嘛”都没说清楚。
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
1
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务