#21 [Lý thuyết đồ thị | Toán rời rạc]. Thuật Toán Dijkstra | Thuật Toán Tìm Đường Đi Ngắn Nhất

Поділитися
Вставка
  • Опубліковано 29 січ 2025

КОМЕНТАРІ • 78

  • @28tech_
    @28tech_  2 роки тому +2

    Thông tin các khóa học mình đang hướng dẫn : 28tech.com.vn/

  • @28tech_
    @28tech_  2 роки тому +6

    Timeline :
    00:00 : Mã giả và tư tưởng của Dijkstra
    07:10 : Kiểm nghiệm thuật toán Dijkstra
    19:40 : Cài đặt thuật toán Dijkstra
    31:30 : Xây dựng đường đi ngắn nhất
    Mã nguồn tham khảo : ideone.com/Pmj7sa
    _____________________________________________
    Practice problem :
    cses.fi/problemset/task/1671
    cses.fi/problemset/task/1195
    cses.fi/problemset/task/1196
    codeforces.com/problemset/problem/20/C
    codeforces.com/problemset/problem/59/E

  • @taiphanvan2403
    @taiphanvan2403 2 роки тому +3

    Em đã hiểu được thuật toán này.Cảm ơn anh

    • @28tech_
      @28tech_  2 роки тому +1

      Nhớ chia sẻ cho a

    • @ongnhat5132
      @ongnhat5132 10 місяців тому

      e học trên lớp ko hiểu gì nhờ a em hiểu đc ròi ạ em cảm ơn a ạ
      @@28tech_

  • @KhaiNguyen-qi5oo
    @KhaiNguyen-qi5oo 6 днів тому

    hay quá!!!!!!!!!!!!!!!

  • @faqgaming64
    @faqgaming64 25 днів тому

    hay quá a oiw >

  • @hauthanh1744
    @hauthanh1744 Рік тому +2

    Anh ơi anh làm video hướng dẫn về thuật toán Ford - Bellman đi anh, nó có giống Dijkstra hong anh

  • @puongnguyen4073
    @puongnguyen4073 Рік тому +1

    Anh ơi cái điều kiện lúc 23:20 ko có thì có sai khong anh.

  • @KaitoKid242
    @KaitoKid242 4 місяці тому

    Hay rùi A ơi

  • @lyvc6483
    @lyvc6483 2 роки тому

    Cám ơn rất nhiều!

  • @thanhbinhnguyen5943
    @thanhbinhnguyen5943 2 роки тому

    Hay quá anh ơi :3

    • @28tech_
      @28tech_  2 роки тому

      🤗🤗🤗🤗

  • @hieuahoang7556
    @hieuahoang7556 2 роки тому

    Ồ đây rồi, cày view thôi

    • @28tech_
      @28tech_  2 роки тому

      🤡🤡🤡 ok e nhé

  • @HuySatoou
    @HuySatoou 2 роки тому +1

    Cho mình hỏi sao phần relaxation u=5 d(4) lại giữ nguyên vậy ạ

  • @fruith_
    @fruith_ 2 роки тому

    à rồi oke cảm ơn anh ạ

  • @nightcoretado3877
    @nightcoretado3877 2 роки тому

    cảm ơn anh

  • @NguyễnLong-o1t
    @NguyễnLong-o1t 9 місяців тому

    em cảm ơn anh

  • @huunguyenvonguyen6867
    @huunguyenvonguyen6867 Рік тому

    trên mac có ide c++ nào hỗ trợ bits/stdc++.h> khg anh

  • @komaiptit5792
    @komaiptit5792 2 роки тому

    em tuowng cái kc==d[v] r thì cái dk để continue là ntn v ạ

  • @KhangNguyen-fg5si
    @KhangNguyen-fg5si Рік тому

    đồ thị vô hướng thì sao anh ơiii

  • @lovesegtree
    @lovesegtree Рік тому

    cho em hỏi làm sao dùng chuột mà vẽ được chữ số đẹp như anh ạ tại em vẽ thấy xấu ghê sợ ko đọc nổi

    • @28tech_
      @28tech_  Рік тому

      Anh vẽ nhiều nó quen á em ơi.

  • @newday_365
    @newday_365 4 місяці тому

    ah có bài thuật toán Froyd không ah?

    • @28tech_
      @28tech_  4 місяці тому +1

      Chưa có em ạ

  • @oanuc9806
    @oanuc9806 6 місяців тому

    Anh cho em xin đề bài của bài trên với ạ

    • @28tech_
      @28tech_  6 місяців тому

      Em viết lại input là được mà vì lâu anh cũng ko lưu

  • @1cuyu
    @1cuyu 4 місяці тому

    cam on sep!

  • @LuuNguyen-kw8mg
    @LuuNguyen-kw8mg 2 роки тому

    Vậy nếu em muốn in ra k đoạn đường ngắn nhất từ đỉnh s đến đỉnh t thì sao ạ ?

  • @31.nguyentranthangtrung46
    @31.nguyentranthangtrung46 2 роки тому +3

    Anh ơi trên lớp cô em kh dạy thuật toán Dijkstra mà dạy thuật toán Floyd, kh biết anh có thể làm về thuật toán Floyd và phân tích về ưu nhược điểm của 2 thuật toán này được kh ạ.

    • @maiquochuy1543
      @maiquochuy1543 Рік тому

      nếu dữ liệu nhỏ thì xài floyd đc còn dữ liệu lớn thì dijks

  • @bldouyin4145
    @bldouyin4145 Рік тому

    Nếu muốn tìm đường đi ngắn nhất mà có trọng số âm thì dùng thuật toán gì ạ > ?

  • @vietnguyen2521
    @vietnguyen2521 2 роки тому

    hàm nhập là anh đang biểu diễn đồ thị ở dạng gì vậy ạ

    • @28tech_
      @28tech_  2 роки тому +1

      Danh sách cạnh nhé em

    • @vietnguyen2521
      @vietnguyen2521 2 роки тому

      danh sách cạnh là vector adj mà sao lại thành mảng adj nữa chi vậy ạ mong anh giải thích giúp em

    • @Lunguyen08
      @Lunguyen08 Рік тому

      @@vietnguyen2521 thì nó là 1 mảng lưu các vector, mỗi phần tử trong vector lại là 1 pair

  • @minhlequan6482
    @minhlequan6482 2 роки тому +2

    Bài này nếu yêu cầu tìm số lượng đường đi ngắn nhất đến 1 đỉnh thì làm thế nào a nhỉ :v

    • @toannguyenlekhanh2323
      @toannguyenlekhanh2323 Рік тому

      Đường đi ngắn nhất mà con số lượng à ':))

    • @minhlequan6482
      @minhlequan6482 Рік тому +1

      @@toannguyenlekhanh2323 ví dụ có nhiều đường đi cùng tổng trọng số và in ra tất cả các đường đó chẳng hạn. Có bạn nhé

  • @HGiang-kf4so
    @HGiang-kf4so Рік тому

    ai giúp mình với, Ct không in đc mảng D, mình không hiểu tại sao
    #include
    using namespace std;
    const int maxn=5001;
    const long long oo=1e15;
    typedef pair pm;
    vector < pair< int, int>>, v[maxn]>;
    long long l[maxn][2];
    long long d[maxn];
    priority_queue q;
    int n, m, k,a,b;
    long long kq;
    void docdl()
    {
    cin >> n >> m >>k;
    cin >> a >>b;
    for (int i=1; i x >> y;
    d[x]=y;
    }
    for (int i=1; i> x >> y >> z;
    v[x].push_back({y,z});
    v[y].push_back({x,z});
    }
    }
    void dij()
    {
    for(int i=1; i

  • @duyvonguyennhat7283
    @duyvonguyennhat7283 2 роки тому +1

    a làm clip giải bài trên cses đi a

    • @28tech_
      @28tech_  2 роки тому +1

      bận quá em ạ chưa có thời gian ấy.

  • @dieudoanvan
    @dieudoanvan 6 місяців тому

    bạn nên để V,E thay vì n,m cách đặt tên biến nên logic tới giải thuật

    • @28tech_
      @28tech_  6 місяців тому

      cũng được b :D

  • @vnam3008
    @vnam3008 Рік тому +1

    Anh ơi, anh lên video chỉ làm cái code khi mà anh gõ main thì nó ra cả cái khung chương trình luôn đc không anh

    • @28tech_
      @28tech_  Рік тому +1

      Nó là snippest nhé em

  • @hoangvietnguyen5788
    @hoangvietnguyen5788 2 роки тому

    anh ơi kênh anh có phần quy hoạch động ko anh có thì cho em xin link với ạ c hoặc c++ nhé a!

    • @28tech_
      @28tech_  2 роки тому

      Không có em ơi, phần này kén người xem lắm

    • @hoangvietnguyen5788
      @hoangvietnguyen5788 2 роки тому

      @@28tech_ ok a nhé tại vì cái này khá khó hiểu với bình thg xem a dễ hiểu lắm ạ vì anh kiểu viết ra cái bảng ấy!

    • @Lunguyen08
      @Lunguyen08 Рік тому

      @@28tech_ làm quy hoạch động đi anh, cấu trúc đề thi hsg ở em nói thẳng ra là 7/20 điểm bài quy hoạch động 😭😭😭

  • @gianglo123
    @gianglo123 Рік тому

    a vẽ bằng chuột hay bằng bút thế a

    • @28tech_
      @28tech_  Рік тому

      Chuột nhé em

    • @gianglo123
      @gianglo123 Рік тому

      @@28tech_ vẽ đẹpt thế a

  • @quangninh2204
    @quangninh2204 2 роки тому

    a ơi cho e hỏi độ phức tạp thuật toán này là bao nhiêu vậy a

    • @28tech_
      @28tech_  2 роки тому

      Độ phức tạp của thuật toán này nếu em dùng hàng đợi ưu tiên thì là O(ElogV) với E là số cạnh, V là số đỉnh của đồ thị.

  • @nguyenvanhung8560
    @nguyenvanhung8560 2 роки тому

    thanks a

  • @kienttftu
    @kienttftu 2 роки тому

    Khi đỉnh đã được marked rồi thì ko cần relaxation nữa. Cái việc tính tiếp khoảng cách từ 5 đến 4 và 6 sau khi đỉnh 4 và đỉnh 6 đã marked là không chính xác và không cần thiết!

  • @phucanhnguyen5796
    @phucanhnguyen5796 Рік тому

    anh cho e hỏi cái vector nó hoạt động như thế nào vậy

  • @nguyenphuthanhat4530
    @nguyenphuthanhat4530 2 роки тому +1

    Khó hiểu đoạn kc > d[u] quá

  • @gaminghardware1471
    @gaminghardware1471 6 місяців тому

    Dijkstra phong cách đệ quy
    void Dijkstra(int s){
    if(!visited[s]){
    for(auto a:adj[s]){
    int v=a.first;
    int w=a.second;
    dist[v]=min(dist[v],dist[s]+w);
    }
    visited[s]=true;
    int min_val=INF;
    int min_cur=0;
    for(int i=1;idist[i]){
    min_val=dist[i];
    min_cur=i;
    }
    }
    }
    if(min_cur==0){
    return;
    }
    Dijkstra(min_cur);
    }
    }

  • @henrymai1304
    @henrymai1304 2 роки тому

    e xin link contest trên hackerrank với ạ

    • @28tech_
      @28tech_  2 роки тому

      Em nhắn tin fb anh để phần mô tả ấy

  • @tuankhanhnguyen1055
    @tuankhanhnguyen1055 2 роки тому

    Cho em hỏi là: vì sao phải kc > d[u] vậy ạ. Phải là kc < d[u] chứ ạ do lúc đầu d[u] mình đã set nó bằng INF cho nên nó luôn lớn hơn kc phải không ạ ?? Mong anh hoặc mọi người giải thích ạ

    • @28tech_
      @28tech_  2 роки тому

      Chắc a viết nhầm đó e

    • @tuankhanhnguyen1055
      @tuankhanhnguyen1055 2 роки тому

      @@28tech_ dạ em cảm ơn anh rất nhiều ạ

    • @hoanhoan376
      @hoanhoan376 Рік тому +1

      Vì ban đầu nó luôn > kc nên khi nó < kc tức là nó đã được marked

  • @yt.quyetdaika
    @yt.quyetdaika 2 роки тому +1

    rất là khó hiểu 1 tí 😂

  • @Lunguyen08
    @Lunguyen08 Рік тому

    ai giải thích giúp chỗ kc>d[u] được không

    • @nguyenthiennhan4376
      @nguyenthiennhan4376 11 місяців тому +1

      bởi vì mỗi đỉnh có thể được tối ưu từ nhiều đỉnh kề khác nhau dẫn đến trong pq có rất nhiều phiên bản của nó. Và vì pq luôn ưu tiên trọng số nhỏ nên về cuối những thằng trọng số to sẽ bị sót lại và ta làm vậy để không phải xét nó khiến mất tg nhé bạn

  • @truongtaman5663
    @truongtaman5663 2 роки тому

    • @28tech_
      @28tech_  2 роки тому

      Học dần đi em 😁😁😁😁

  • @atNguyen-bu6rp
    @atNguyen-bu6rp Рік тому

    nếu như này thì số âm vẫn đúng mà nhỉ