C# Fib Frog
static int FibFrog(int[] a)
{
var size = a.Length;
var fib = new List<int> { 0, 1 };
for (int i = 1; fib[i] <= size;)
{
i++;
fib.Add(fib[i - 1] + fib[i - 2]);
}
var queue = new Queue<(int Idx, int Jmp)>();
queue.Enqueue((-1, 0));
var visited = new bool[size];
while (queue.Count > 0)
{
var (idx0, jmp) = queue.Dequeue();
for (int i = fib.Count - 1; i >= 2; i--)
{
var idx = idx0 + fib[i];
if (idx == size)
{
return jmp + 1;
}
if (idx > size || visited[idx] || a[idx] == 0)
{
continue;
}
if (a[idx] == 1)
{
visited[idx] = true;
queue.Enqueue((idx, jmp + 1));
}
}
}
return -1;
}
This precomputes Fibonacci jumps, then uses a breadth-first search to find the shortest valid path across the river.