/** * @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. * 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. * @author [Rakshaa Viswanathan](https://github.com/rakshaa2000) */ #include #include #include /** * @brief This function implements the above algorithm * @param array of numbers containing the maximum jump (in steps) from that index * @return returns bool value whether final index can be reached or not */ bool canJump(std::vector nums) { auto lastPos = nums.size() - 1; for (auto i = nums.size() - 1; i >= 0; i--) { if (i + nums[i] >= lastPos) { lastPos = i; } } return lastPos == 0; } /** * @brief Function to test above algorithm * @returns void */ static void test(){ //Test 1 std::vector num1={4,3,1,0,5}; assert(canJump(num1)==true); std::cout<<"Input: "; for(auto i: num1){ std::cout< num2={3,2,1,0,4}; assert(canJump(num2)==false); std::cout<<"Input: "; for(auto i: num2){ std::cout<