Write a function named countIslands that accepts a reference to a Grid of integers as a parameter, where every integer in the grid is either 0 to represent water or 1 to represent land, and returns an integer count of how many contiguous "islands" of land are in the grid.
An "island" is a connected group of land areas (1) that neighbor each other directly up, down, east, or west (not diagonal).
For example, suppose the grid contains the following values:
Grid<int> map {
{0, 0, 0, 0, 0, 0, 1},
{0, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 0, 0, 0},
{0, 1, 0, 1, 0, 1, 0},
{0, 0, 0, 0, 0, 1, 0},
{0, 1, 1, 0, 0, 1, 0},
{0, 1, 1, 0, 0, 0, 0}
};
There are five distinct islands in this grid, so the call of countIslands(map) should return 5.
Your code should work for a board of any size, even one with 0 rows or columns.
You may assume that no values appear in the grid other than 0 and 1.