ধরুন আমাদের n শহর আছে m ফ্লাইট দ্বারা সংযুক্ত। প্রতিটি ফ্লাইট u থেকে শুরু হয় এবং একটি মূল্য w সহ v এ পৌঁছায়। যদি আমাদের সমস্ত শহর এবং ফ্লাইট থাকে, একত্রে শুরুর শহর src এবং গন্তব্য dst সহ, এখানে আমাদের কাজ হল src থেকে dst পর্যন্ত k স্টপ সহ সবচেয়ে সস্তা মূল্য খুঁজে পাওয়া। যদি এমন কোন রুট না থাকে, তাহলে ফিরুন -1।
সুতরাং, যদি ইনপুট n =3, edges =[[0,1,100],[1,2,100],[0,2,500]], src =0, dst =2, k =1 এর মত হয়, তাহলে আউটপুট হবে 200

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
ডেটা নামে একটি ডেটা স্ট্রাকচার তৈরি করুন, এটি নোড, ডিস্ট এবং ভ্যাল
ধরে রাখতে পারে -
একটি 2D অ্যারে খরচ সংজ্ঞায়িত করুন
-
খরচ :=অর্ডারের একটি 2D অ্যারে (n + 1) x (K + 10) এটিকে অসীম দিয়ে পূরণ করুন
-
একটি 3D অ্যারে গ্রাফ সংজ্ঞায়িত করুন
-
আরম্ভ করার জন্য i :=0, যখন i <ফ্লাইটের আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −
-
u :=ফ্লাইট[i, 0]
-
v :=ফ্লাইট[i, 1]
-
গ্রাফ[u]
-এর শেষে { v, flights[i, 2] } সন্নিবেশ করুন
-
-
একটি অগ্রাধিকার সারি q
সংজ্ঞায়িত করুন -
q
-এ ডেটা(src, 0, 0) সন্নিবেশ করান -
খরচ[src, 0] :=0
-
উত্তর :=-1
-
যখন (q খালি নয়), −
করুন-
temp :=q
এর শীর্ষ উপাদান -
curr :=temp.node
-
q
থেকে উপাদান মুছুন -
dist :=temp.dist
-
যদি curr dst এর মত হয়, তাহলে −
-
রিটার্ন temp.cost
-
-
(1 দ্বারা দূরত্ব বাড়ান)
-
যদি dist> K + 1 হয়, তাহলে −
-
নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান
-
-
আরম্ভ করার জন্য i :=0, যখন i <গ্রাফের আকার[curr], আপডেট করুন (i 1 দ্বারা বাড়ান), করবেন −
-
প্রতিবেশী :=গ্রাফ[curr, i, 0]
-
যদি খরচ[প্রতিবেশী, জেলা]> খরচ[curr, dist - 1] + graph[curr, i, 1], তাহলে −
-
খরচ[প্রতিবেশী, জেলা] :=খরচ[curr, dist - 1] + গ্রাফ[curr, i, 1]
-
q
-এ ডেটা(প্রতিবেশী, ডিস্ট, খরচ[প্রতিবেশী, ডিস্ট]) সন্নিবেশ করান
-
-
-
-
রিটার্ন -1
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h>
using namespace std;
struct Data{
int node, dist, cost;
Data(int a, int b, int c){
node = a;
dist = b;
cost = c;
}
};
struct Comparator{
bool operator() (Data a, Data b) {
return !(a.cost < b.cost);
}
};
class Solution {
public:
vector<vector<int>> cost;
int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int K) {
cost = vector<vector<int> >(n + 1, vector<int>(K + 10, INT_MAX));
vector<vector<int> > graph[n];
for (int i = 0; i < flights.size(); i++) {
int u = flights[i][0];
int v = flights[i][1];
graph[u].push_back({ v, flights[i][2] });
}
priority_queue<Data, vector<Data>, Comparator> q;
q.push(Data(src, 0, 0));
cost[src][0] = 0;
int ans = -1;
while (!q.empty()) {
Data temp = q.top();
int curr = temp.node;
q.pop();
int dist = temp.dist;
if (curr == dst)
return temp.cost;
dist++;
if (dist > K + 1)
continue;
for (int i = 0; i < graph[curr].size(); i++) {
int neighbour = graph[curr][i][0];
if (cost[neighbour][dist] > cost[curr][dist - 1] + graph[curr][i][1]) {
cost[neighbour][dist] = cost[curr][dist - 1] + graph[curr][i][1];
q.push(Data(neighbour, dist, cost[neighbour][dist]));
}
}
}
return -1;
}
};
main(){
Solution ob;
vector<vector<int>> v = {{0,1,100},{1,2,100},{0,2,500}};
cout << (ob.findCheapestPrice(3, v, 0, 2, 1));
} ইনপুট
3, {{0,1,100},{1,2,100},{0,2,500}}, 0, 2, 1 আউটপুট
200