From 8fd0d0ca85e5d4029df2613c9518f8e01e14212c Mon Sep 17 00:00:00 2001 From: Kshitiz Sharma <110187324+kshitiz11101@users.noreply.github.com> Date: Sun, 30 Jun 2024 11:13:57 +0530 Subject: [PATCH] Create NumberOfWaysToReachDestination.cpp --- Graphs/NumberOfWaysToReachDestination.cpp | 48 +++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Graphs/NumberOfWaysToReachDestination.cpp diff --git a/Graphs/NumberOfWaysToReachDestination.cpp b/Graphs/NumberOfWaysToReachDestination.cpp new file mode 100644 index 0000000..b48b67f --- /dev/null +++ b/Graphs/NumberOfWaysToReachDestination.cpp @@ -0,0 +1,48 @@ +class Solution { +public: + int countPaths(int n, vector>& roads) { + int mod = (1e9 + 7); + vector> adj[n]; + for(auto it: roads){ + adj[it[0]].push_back({it[1], it[2]}); + adj[it[1]].push_back({it[0], it[2]}); + } + + priority_queue, vector>, greater>> pq; + + vector dist(n, 1e18); + vector ways(n, 0); + + dist[0] = 0; + ways[0] = 1; + + pq.push({0,0}); + + + while(!pq.empty()){ + long long dis = pq.top().first; + int node = pq.top().second; + pq.pop(); + + for(auto i : adj[node]){ + int adjnode = i.first; + long long adjweight = i.second; + + if(dis + adjweight < dist[adjnode]){ + dist[adjnode] = adjweight + dis; + pq.push({dist[adjnode], adjnode}); + // IMP + ways[adjnode] = ways[node]% mod; + // + } + else if(dis + adjweight == dist[adjnode]) + { + // IMP + ways[adjnode] = (ways[adjnode] + ways[node])%mod; + // + } + } + } + return (ways[n - 1]) % mod; + } +};