2020-09-01 09:55:04 +05:30
/**
* @ file
* \ brief Implementation of an algorithm to solve the jumping game problem
* \ details
* This algorithm is a greedy algorithm .
* This solution takes in input as a vector and output as a boolean to check if you can reach the last position .
2020-09-02 22:42:31 +05:30
* @ author [ Rakshaa Viswanathan ] ( https : //github.com/rakshaa2000)
2020-09-01 09:55:04 +05:30
*/
2020-09-01 00:04:11 +05:30
2020-09-01 00:08:54 +05:30
# include <vector>
# include<iostream>
2020-09-01 00:15:34 +05:30
2020-09-01 09:55:04 +05:30
//Implements the algorithm
/*We name the indices good and bad based on whether we can reach the destination if we start at that position.
* We initialize the last index as lastPos .
* Here , we start from the end of the array and check if we can ever reach the first index .
* We check if the sum of the index and the maximum jump count given is greater than or equal to the lastPos .
* If yes , then that is the last position you can reach starting from the back .
* After the end of the loop , if we reach the lastPos as 0 , then the destination can be reached from the start position .
*/
2020-09-04 11:16:15 +05:30
/**
* This function implements the above algorithm
* @ param vector of nums containing the maximum jump ( in steps ) from that index
* @ return returns bool value whether final index can be reached or not
*/
2020-09-01 00:18:51 +05:30
bool canJump ( std : : vector < int > nums ) {
2020-09-01 00:15:34 +05:30
auto lastPos = nums . size ( ) - 1 ;
2020-09-01 00:12:43 +05:30
for ( auto i = nums . size ( ) - 1 ; i > = 0 ; i - - ) {
2020-09-01 00:04:11 +05:30
if ( i + nums [ i ] > = lastPos ) {
lastPos = i ;
}
}
return lastPos = = 0 ;
}
2020-09-02 22:43:02 +05:30
/**
* @ brief Main function
* @ returns 0 on exit
*/
2020-09-01 00:18:51 +05:30
int main ( ) {
2020-09-01 00:04:11 +05:30
//Sample test case
2020-09-01 00:18:51 +05:30
std : : vector < int > num = { 4 , 3 , 1 , 0 , 5 } ;
2020-09-01 00:22:20 +05:30
std : : cout < < canJump ( num ) ; //Should display true, as when you take one step from position 0, you reach position 1, from which 3 steps lead you to the destination
2020-09-01 00:18:51 +05:30
return 0 ;
2020-09-01 00:04:11 +05:30
}