Satellite Problem

A message received from a satellite sent on Jupiter contains the
information about which part of the concerned area is land and which is a
part of ocean. To do this, the satellite divides the whole rectangular
area into small squares of unit dimensions and for each square cell, it
sends a terrain bit (either ‘0 or ‘1’) telling whether that square is a
part of land or a part of a water body. ‘0’ for a square tells that it
is a land and ‘1’ tells that it is a part of water body.
Given
the terrain bit for each square cell, you have to decide the size of
largest island on the area considered so that it can decide where to
land.
If two cells have terrain bit as ‘0’ and they have a common side,
they belong to same island.
Input/Output Specifications
Input:

      Size of the rectangular area {N,M)
      Message: ( N lines each containing M bits)

Output:

Size of largest useful land

Method / Formula:

Max_size = 0
while there is at least one unvisited land cell
{
Pick an unvisited cell (call it current cell)
Put the current cell into the visiting queue.
Local_size = 0
While the visiting queue is not empty:
{
Pick a cell from the visiting queue
Mark the current cell as visited;
Put all the unvisited neighboring cells of ‘x’ (which are already not in the queue) into the visiting queue q;
Increase local_size by 1;
}
If (local_size > size) then size = local_size;
}
Examples
Example 1

Size of the area ={1,1}
Message(encoded bits) = {1}
O/P = 0

Example 2

Size of the area ={2,2}
Message(encoded bits) = {1#0,0#1}
O/P = 1

Example 3

For a given message for a 3*9 rectangular field as follows:
011010001
010100000
111110011
The largest useful land size is 10