From 69b78b24fee085265fa39bd4828ee069da020e8b Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Sat, 14 Nov 2020 17:51:28 -0800 Subject: [PATCH] Update 1652.Minimum-Jumps-to-Reach-Home.cpp --- .../1652.Minimum-Jumps-to-Reach-Home.cpp | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/BFS/1652.Minimum-Jumps-to-Reach-Home/1652.Minimum-Jumps-to-Reach-Home.cpp b/BFS/1652.Minimum-Jumps-to-Reach-Home/1652.Minimum-Jumps-to-Reach-Home.cpp index 640a88dcd..458e6d330 100644 --- a/BFS/1652.Minimum-Jumps-to-Reach-Home/1652.Minimum-Jumps-to-Reach-Home.cpp +++ b/BFS/1652.Minimum-Jumps-to-Reach-Home/1652.Minimum-Jumps-to-Reach-Home.cpp @@ -1,5 +1,5 @@ class Solution { - int dp[6001][2]; + int visited[6001][2]; public: int minimumJumps(vector& forbidden, int a, int b, int x) { @@ -7,43 +7,41 @@ class Solution { int max_forbid = *max_element(forbidden.begin(), forbidden.end()); int limit = x + b + max_forbid; - for (int i=0; i<=limit; i++) - { - dp[i][0] = INT_MAX/2; - dp[i][1] = INT_MAX/2; - } for (auto x:forbidden) { - dp[x][0] = -1; - dp[x][1] = -1; + visited[x][0] = -1; + visited[x][1] = -1; } - dp[0][0] = 0; + visited[0][0] = 0; queue>q; q.push({0,0}); + int step = 0; + while (!q.empty()) { int len = q.size(); + step++; while (len--) { int i = q.front().first; int k = q.front().second; q.pop(); - if (i+a < limit && dp[i+a][0]!=-1 && dp[i+a][0] > dp[i][k]+1) + if (i+a < limit && visited[i+a][0] == 0) { - dp[i+a][0] = dp[i][k]+1; + visited[i+a][0] = 1; q.push({i+a,0}); - if (i+a==x) return dp[i+a][0]; + if (i+a==x) return step; } if (k==0) { - if (i-b>=0 && dp[i-b][1]!=-1 && dp[i-b][1] > dp[i][k]+1) + if (i-b>=0 && visited[i-b][1] == 0) { - dp[i-b][1] = dp[i][k]+1; + visited[i-b][1] = 1; q.push({i-b,1}); - if (i-b==x) return dp[i-b][1]; + if (i-b==x) return step; } } }