1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
#include <iostream>
#include <string>
int c = 0;
using namespace std;
bool jump(int arr[], bool a[], int len, int current = 0)
{
if (c > (len * 100))
return false;
c++;
if(current < 0)
std::cout << "\n\nCurrent: " << current << "\n\n";
a[current] = true;
if (((arr[current] + current) == len || current == len))
{
current = arr[current] + current;
return true;
}
if ((arr[current] + current) < len && a[current - arr[current]])
{
current = arr[current] + current;
if (jump(arr, a, len, current))
return true;
else if ((current - arr[current]) > 0)
{
if (arr[current] == arr[current - arr[current]] || a[current - arr[current]])
return false;
current = current - arr[current];
if (jump(arr, a, len, current))
return true;
}
}
if ((current - arr[current]) > 0)
{
if (arr[current] == arr[current - arr[current]] && a[current - arr[current]])
return false;
if (a[current - arr[current]])
{
int temp = current - arr[current];
if (!((temp - arr[temp]) > 0))
{
return false;
}
current = current - arr[current];
}
current = current - arr[current];
if (jump(arr, a, len, current))
return true;
else if ((arr[current] + current) < len)
{
current = arr[current] + current;
if (jump(arr, a, len, current))
return true;
}
}
return false;
}
int main()
{
int arr[] = { 6, 8, 2, 3, 4, 6, 3, 5, 2, 0 };
int arr1[] = { 3, 6, 4, 1, 3, 4, 2, 3, 1, 0 };
int arr2[] = { 3, 1, 2, 3, 0 }; //False
int arr3[] = { 3, 6, 4, 1, 3, 4, 2, 7, 1, 0 };
int arr4[] = { 3, 6, 4, 1, 3, 4, 2, 4, 1, 0 };
int arr5[] = { 3, 6, 4, 1, 1, 2, 2, 4, 1, 0 };
int arr6[] = { 7, 6, 4, 1, 1, 2, 2, 4, 1, 0 };
int arr7[] = { 3, 6, 5, 1, 3, 4, 3, 4, 1, 0 }; //False
int arr8[] = { 3, 7, 1, 1, 3, 4, 2, 4, 1, 0 };
int arr9[] = { 3, 9, 1, 1, 3, 4, 2, 4, 1, 0 }; //False
int arr10[] = { 3, 9, 1, 1, 3, 4, 2, 4, 1, 2, 6, 2, 6, 0 };
int arr11[] = { 3, 9, 1, 1, 3, 4, 2, 4, 1, 2, 6, 3, 6, 0 }; //False
bool a[9] = { false };
bool a1[9] = { false };
bool a2[5] = { false };
bool a3[9] = { false };
bool a4[9] = { false };
bool a5[9] = { false };
bool a6[9] = { false };
bool a7[9] = { false };
bool a8[9] = { false };
bool a9[9] = { false };
bool a10[13] = { false };
bool a11[13] = { false };
std::cout << "0: " << (jump(arr, a, 9, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "1: " << (jump(arr1, a1, 9, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "2: " << (jump(arr2, a2, 4, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "3: " << (jump(arr3, a3, 9, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "4: " << (jump(arr4, a4, 9, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "5: " << (jump(arr5, a5, 9, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "6: " << (jump(arr6, a6, 9, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "7: " << (jump(arr7, a7, 9, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "8: " << (jump(arr8, a8, 9, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "9: " << (jump(arr9, a9, 9, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "10: " << (jump(arr10, a10, 13, 0) ? "True\n" : "False\n");
c = 0;
std::cout << "11: " << (jump(arr11, a11, 13, 0) ? "True\n" : "False\n");
}
|