Skip to content

Commit 19df3dd

Browse files
authored
DFS+Pruning
1 parent 9f1e2bf commit 19df3dd

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

Cheapest Flights Within K Stops

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#define pb push_back
2+
class Solution {
3+
4+
void solve(vector<vector<int>>& adj,vector<vector<int>>& cost,int src,int dst,int k,int& fare,int totCost,vector<bool>& visited)
5+
{
6+
if(k<-1)
7+
return;
8+
9+
if(src == dst)
10+
{
11+
fare = min(fare, totCost);
12+
return;
13+
}
14+
15+
visited[src]=true;
16+
for(int i=0;i<adj[src].size();i++)
17+
{
18+
if(!visited[adj[src][i]] and (totCost + cost[src][adj[src][i]]) <= fare)
19+
solve(adj, cost, adj[src][i], dst, k-1, fare, totCost+cost[src][adj[src][i]], visited);
20+
}
21+
visited[src] = false;
22+
23+
}
24+
25+
public:
26+
27+
28+
int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int K)
29+
{
30+
ios_base::sync_with_stdio(false);
31+
cin.tie(NULL);
32+
cout.tie(NULL);
33+
34+
vector<vector<int>> adj(n);
35+
vector<vector<int>> cost(n+1, vector<int>(n+1));
36+
37+
for(int i=0;i<flights.size();i++)
38+
{
39+
adj[flights[i][0]].pb(flights[i][1]);
40+
cost[flights[i][0]][flights[i][1]] = flights[i][2];
41+
}
42+
vector<bool> visited(n+1, false);
43+
int fare = INT_MAX;
44+
45+
solve(adj, cost, src, dst, K, fare, 0 ,visited);
46+
47+
if(fare == INT_MAX)
48+
return -1;
49+
return fare;
50+
}
51+
52+
};

0 commit comments

Comments
 (0)