algorithm
  • মডিউল ১ঃ গ্রাফের বেসিক ধারণা
    • মডিউল ১_০ঃ অ্যালগরিদম
    • মডিউল ১_১ঃ গ্রাফের বেসিক
    • মডিউল ১_২ঃ অ্যাডজাসেন্সি ম্যাট্রিক্স
    • মডিউল ১_৩ঃ অ্যাডজাসেন্সি ম্যাট্রিক্স ইমপ্লিমেন্টশন
    • মডিউল ১_৪ঃ অ্যাডজাসেন্সি লিস্ট
    • মডিউল ১_৫ঃ অ্যাডজাসেন্সি লিস্ট ইমপ্লিমেন্টশন
    • মডিউল ১_৬ঃ STL pair
    • মডিউল ১_৭ঃ Edge লিস্ট
  • মডিউল ২ঃ ব্রেডথ ফার্স্ট সার্চ
    • মডিউল ২_০ঃ ব্রেডথ ফার্স্ট সার্চ কি?
    • মডিউল ২_১ঃ বিএফএস এলগোরিদম
    • মডিউল ২_২ঃ বিএফএস কোড ইমপ্লিমেন্টেশন
    • মডিউল ২_৩ঃ বিএফএস লেভেল ট্র্যাকিং
    • মডিউল ২_৪ঃ কমপ্লেক্সিটি অ্যানালাইসিস
    • মডিউল ২_৫ঃ পাথ প্রিন্টিং
    • মডিউল ২_৬ঃ পাথ প্রিন্টিং ইমপ্লিমেন্টেশন
  • মডিউল ৩ঃ DFS এবং 2D গ্রীড
    • মডিউল ৩_০ঃ ইনট্রোডাকশন
    • মডিউল ৩_১ঃ DFS
    • মডিউল ৩_২ঃ DFS ইমপ্লিমেন্টশন
    • মডিউল ৩_৩ঃ 2D গ্রীড
    • মডিউল ৩_৪ঃ 2D গ্রীডে DFS ইমপ্লিমেন্টশন
    • মডিউল ৩_৫ঃ 2D গ্রীডে BFS ইমপ্লিমেন্টশন
  • মডিউল ৫ঃ Cycle Detection
    • মডিউল ৫_০ঃ ইনট্রোডাকশন
    • মডিউল ৫_১ঃ Cycle Detection Undirected গ্রাফে
    • মডিউল ৫_২ঃ Cycle Detection Undirected গ্রাফ BFS ইমপ্লিমেন্টশন
    • মডিউল ৫_৩ঃ Cycle Detection Undirected গ্রাফ DFS ইমপ্লিমেন্টশন
    • মডিউল ৫_৪ঃ Cycle Detection Directed গ্রাফে
    • মডিউল ৫_৫ঃ Cycle Detection Directed গ্রাফ DFS ইমপ্লিমেন্টশন
  • মডিউল ৬ঃ Dijkstra এলগরিদম
    • মডিউল ৬_০ঃ ইনট্রডাকশন
    • মডিউল ৬_১ঃ কেন Dijkstra এলগরিদম আমাদের প্রয়োজন?
    • মডিউল ৬_২ঃ পাথ রিলেক্সেশন
    • মডিউল ৬_৩ঃ Dijkstra Naive Approach
    • মডিউল ৬_৪ঃ Dijkstra Naive Approach Code
    • মডিউল ৬_৫ঃ Dijkstra Optimize Approach
    • মডিউল ৬_৭ঃ Dijkstra Optimize Code
  • মডিউল ৭ঃ Bellmanford এবং Floyd Warshall এলগোরিদম
    • মডিউল ৭_১ঃ কেন দরকার Bellmanford?
    • মডিউল ৭_২ঃ Bellmanford Algorithm
    • মডিউল ৭_৪ঃ Bellmanford Algorithm Code
    • মডিউল ৭_৫ঃ ডিটেক্ট নেগেটিভ সাইকেল
    • মডিউল ৭_৬ঃ কেন Floyd Warshall এলগোরিদম প্রয়োজন?
    • মডিউল ৭_৭ঃ Floyd Warshall Algorithm
    • মডিউল ৭_৮ঃ Floyd Warshall Algoritm Code
  • মডিউল ৯ঃ BFS , DFS দিয়ে Problem Solving
    • মডিউল ৯_০ঃ ইনট্রোডাকশন
    • মডিউল ৯_১ঃ Island Perimeter [Leetcode]
    • মডিউল ৯_২ঃ Find if Path Exists in Graph [Leetcode]
    • মডিউল ৯_৩ঃ Max Area of Island [Leetcode]
    • মডিউল ৯_৪ঃ Number of Islands [Leetcode]
    • মডিউল ৯_৫ঃ Count Sub Islands [Leetcode]
    • মডিউল ৯_৬ঃ Number of Closed Islands [Leetcode]
  • মডিউল ১০ঃ Disjoint Set Union
    • মডিউল ১০_০ঃ ইনট্রডাকশন
    • মডিউল ১০_১ঃ DSU কি?
    • মডিউল ১০_২ঃ Union Find কিভাবে কাজ করে?
    • মডিউল ১০_৩ঃ Find অপারেশন ইমপ্লিমেন্টেশন
    • মডিউল ১০_৫ঃ Union and Union by Size
    • মডিউল ১০_৭ঃ Union by rank
  • মডিউল ১১ঃ DSU Cycle Detection এবং MST
    • মডিউল ১১_০ঃ ইনট্রডাকশন
    • মডিউল ১১_১ঃ DSU দিয়ে Cycle Detection Undirected গ্রাফে
    • মডিউল ১১_২ঃ DSU দিয়ে Cycle Detection Undirected গ্রাফে ইমপ্লিমেন্টেশন
    • মডিউল ১১_৩ঃ Minimum Spanning Tree কি ?
    • মডিউল ১১_৪ঃ MST এর জন্য Kruskals Algorithm
    • মডিউল ১১_৫ঃ MST এর জন্য Kruskals Algorithm ইমপ্লিমেন্টেশন
  • মডিউল ১৩ঃ বেসিক গ্রাফ রিক্যাপ
    • মডিউল ১৩_০ঃ ইনট্রডাকশন
    • মডিউল ১৩_১ঃ এডজেসেন্সি ম্যাট্রিক্স
    • মডিউল ১৩_২ঃ এডজেসেন্সি লিস্ট ও এজ লিস্ট
    • মডিউল ১৩_৩ঃ এডজেসেন্সি লিস্ট টু এডজেসেন্সি ম্যাট্রিক্স পার্ট-১
    • মডিউল ১৩_৪ঃ এডজেসেন্সি লিস্ট টু এডজেসেন্সি ম্যাট্রিক্স পার্ট-২
    • মডিউল ১৩_৫ঃ এজ লিস্ট টু ম্যাট্রিক্স
    • মডিউল ১৩_৬ঃ এডজেসেন্সি ম্যাট্রিক্স টু এডজেসেন্সি লিস্ট
    • মডিউল ১৩_৭ঃ এজ লিস্ট টু এডজেসেন্সি লিস্ট
    • মডিউল ১৩_৮ঃ এডজেসেন্সি ম্যাট্রিক্স টু এজ লিস্ট
    • মডিউল ১৩_৯ঃ এডজেসেন্সি লিস্ট টু এজ লিস্ট
  • মডিউল ১৪ঃ প্রব্লেম সল্ভিং গ্রাফ অ্যালগরিদম দিয়ে
    • মডিউল ১৪_০ঃ ইনট্রডাকশন
    • মডিউল ১৪_১ঃ Romeo and Juliet
    • মডিউল ১৪_২ঃ Romeo and Juliet ইমপ্লিমেন্টেশন
    • মডিউল ১৪_৩ঃ Minimum Cost for Business
    • মডিউল ১৪_৪ঃ Dijkstra Path Printing
    • মডিউল ১৪_৫ঃ Building Roads
    • মডিউল ১৪_৬ঃ Building Roads ইমপ্লিমেন্টেশন
    • মডিউল ১৪_৭ঃ Message Routes
  • মডিউল ১৫ঃ প্রব্লেম সল্ভিং ২ গ্রাফ অ্যালগরিদম দিয়ে
    • মডিউল ১৫_০ঃ ইনট্রডাকশন
    • মডিউল ১৫_১ঃ Sundorban ইমপ্লিমেন্টেশন সহ
    • মডিউল ১৫_২ঃ Guilty Prince ইমপ্লিমেন্টেশন সহ
    • মডিউল ১৫_৩ঃ Commandos
    • মডিউল ১৫_৪ঃ Commandos ইমপ্লিমেন্টেশন
    • মডিউল ১৫_৫ঃ D. Roads not only in Berland
    • মডিউল ১৫_৬ঃ D. Roads not only in Berland ইমপ্লিমেন্টেশন
  • মডিউল ১৭ঃ বেসিক ডাইনামিক প্রোগামিং
    • মডিউল ১৭_০ঃ ইনট্রডাকশন
    • মডিউল ১৭_১ঃ ডাইনামিক প্রোগ্রামিং কি?
    • মডিউল ১৭_২ঃ ফ্যাক্টোরিয়াল নাম্বার
    • মডিউল ১৭_৩ঃ Fibonacci Series
    • মডিউল ১৭_৪ঃ Fibonacci Subproblem
    • মডিউল ১৭_৬ঃ Fibonacci Memoization
    • মডিউল ১৭_৭ঃ Bottom up approach in Fibonacci series
  • মডিউল ১৮ঃ Knapsack
    • মডিউল ১৮_০ঃ ইনট্রডাকশন
    • মডিউল ১৮_১ঃ Knapsack
    • মডিউল ১৮_২ঃ Knapsack Recursive Approach
    • মডিউল ১৮_৪ঃ Knapsack Top Down Approach ইমপ্লিমেন্টেশনসহ
    • মডিউল ১৮_৫ঃ Knapsack Bottom Up Approach
    • মডিউল ১৮_৬ঃ Knapsack Bottom Up ইমপ্লিমেন্টেশন
  • মডিউল ১৯ঃ 0-1 Knapsack Variation
    • মডিউল ১৯_০ঃ ইনট্রডাকশন
    • মডিউল ১৯_১ঃ সাবসেট সাম টপ ডাউন
    • মডিউল ১৯_২ঃ সাবসেট সাম Bottom up
    • মডিউল ১৯_৩ঃ Count of Subset Sum
    • মডিউল ১৯_৪ঃ Count no of Zeroes in Subset
    • মডিউল ১৯_৫ঃ Equal Sum Partition
    • মডিউল ১৯_৬ঃ Minimum Subset Sum
    • মডিউল ১৯_৭ঃ Count Subset Sum with given difference
    • মডিউল ১৯_৮ঃ Target Sum
  • বোনাস মডিউল ২১ঃ Unbounded Knapsack
    • মডিউল ২১_১ঃ Unbounded Knapsack Approach
    • মডিউল ২১_২ঃ Unbounded Knapsack ইমপ্লিমেন্টেশন
    • মডিউল ২১_৩ঃ Rod Cutting Problem
    • মডিউল ২১_৪ঃ Coin Change 1
    • মডিউল ২১_৫ঃ Coin Change 2
  • বোনাস মডিউল ২২ঃ Longest Common Subsequence
    • মডিউল ২২_১ঃ Substring vs Subsequence
    • মডিউল ২২_২ঃ Longest Common Subsequence Approach
    • মডিউল ২২_৩ঃ LCS Top Down Implementation
    • মডিউল ২২_৪ঃ LCS Bottom Up Implementation
    • মডিউল ২২_৫ঃ LCS Table Fill Up
    • মডিউল ২২_৬ঃ Printing LCS Approach
    • মডিউল ২২_৭ঃ Printing LCS Implementation
    • মডিউল ২২_৮ঃ Longest Common Substring Bottom Up and Printing
  • বোনাস মডিউল ২৩ঃ Merge Sort
    • মডিউল ২৩_০ঃ ইনট্রডাকশন
    • মডিউল ২৩_১ঃ Merge Two Sorted Arrays
    • মডিউল ২৩_২ঃ Merge two sorted array implementation
    • মডিউল ২৩_৩ঃ How Divide Works in Merge Sort
    • মডিউল ২৩_৪ঃ Merge Sort
  • মডিউল ২ঃ ব্রেডথ ফার্স্ট সার্চ
    • Untitled
    • Page 2
Powered by GitBook
On this page
  1. মডিউল ৬ঃ Dijkstra এলগরিদম

মডিউল ৬_৭ঃ Dijkstra Optimize Code

এখন আমরা Dijkstra এলগোরিদম এর অপ্টিমাইজ ভার্সন এর কোডটা ইমপ্লিমেন্ট করব।

// Some code
```cpp
    int n, e;
    cin >> n >> e;
    while (e--)
    {
        int a, b, c;
        cin >> a >> b >> c;
        v[a].push_back({b, c});
        v[b].push_back({a, c});
    }
    for (int i = 0; i < n; i++)
    {
        dis[i] = INT_MAX;
    }
    dijkstra(0);
```

এখানে সব আগের ভার্শন এর মতোই।

// Some code
```cpp
class cmp
{
public:
    bool operator()(pair<int, int> a, pair<int, int> b)
    {
        return a.second > b.second;
    }
};
```
// Some code
```cpp
 priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq;
    pq.push({src, 0});
```

এখন আমরা প্রাইওরিটি কিউ এর মাধ্যমে নোড গুলোর ট্র্যাক রাখব ও যাতে সেই কিউ আমাদের সব সময় ছোট কস্ট এর নোড ফ্রন্ট হিসেবে দেয় তাই একটি কাস্টম কম্পেয়ার ক্লাস লিখলাম।

// Some code
```cpp
    while (!pq.empty())
    {
        pair<int, int> parent = pq.top();
        pq.pop();
        int node = parent.first;
        int cost = parent.second;
        for (pair<int, int> child : v[node])
        {
            int childNode = child.first;
            int childCost = child.second;
            if (cost + childCost < dis[childNode])
            {
                // path relax
                dis[childNode] = cost + childCost;
                pq.push({childNode, dis[childNode]});
            }
        }
    }
```

এখানে আমরা priority queue এম্পটি না হওয়া অব্দি লুপ চালাবো আর টপ ভ্যালুকে নিব। এবং পপ করে দিব। সেই নোড এর প্রত্যেক চাইল্ড এর কাছে যাবো আর যদি তাদেরকে রিল্যাক্স করা পসিবল হয় তাহলে তাদের রিল্যাক্স করে priority queue তে পুশ করে দিব।

সম্পূর্ণ কোডঃ

// Some code
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
vector<pair<int, int>> v[N];
int dis[N];
class cmp
{
public:
    bool operator()(pair<int, int> a, pair<int, int> b)
    {
        return a.second > b.second;
    }
};
void dijkstra(int src)
{
    priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq;
    pq.push({src, 0});
    dis[src] = 0;
    while (!pq.empty())
    {
        pair<int, int> parent = pq.top();
        pq.pop();
        int node = parent.first;
        int cost = parent.second;
        for (pair<int, int> child : v[node])
        {
            int childNode = child.first;
            int childCost = child.second;
            if (cost + childCost < dis[childNode])
            {
                // path relax
                dis[childNode] = cost + childCost;
                pq.push({childNode, dis[childNode]});
            }
        }
    }
}
int main()
{
    int n, e;
    cin >> n >> e;
    while (e--)
    {
        int a, b, c;
        cin >> a >> b >> c;
        v[a].push_back({b, c});
        v[b].push_back({a, c});
    }
    for (int i = 0; i < n; i++)
    {
        dis[i] = INT_MAX;
    }
    dijkstra(0);
    for (int i = 0; i < n; i++)
    {
        cout << i << "-> " << dis[i] << endl;
    }
    return 0;
}
```
Previousমডিউল ৬_৫ঃ Dijkstra Optimize ApproachNextমডিউল ৭ঃ Bellmanford এবং Floyd Warshall এলগোরিদম

Last updated 1 year ago