This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <limits.h>
#include <algorithm>
#include <math.h>
using namespace std;
struct node
{
	int x, y;
	int layer;
	const bool operator< (const node other) const
	{
		return layer > other.layer;
	}
};
int r, c;
bool outofbounds(node n)
{
	return !(0 <= n.x && n.x < r && 0 <= n.y && n.y < c);
}
int main()
{
	iostream::sync_with_stdio(0);
	cin.tie(0);
	int i, j, deepest_layer = 0;
	cin >> r >> c;
	vector<string> g(r);
	for (i = 0; i < r; i++)
	{
		cin >> g[i];
	}
	priority_queue<node> q;
	q.push({ 0, 0, 0 });
	vector<vector<bool>> been(r, vector<bool>(c, 0));
	vector<pair<int, int>> directions = { {0, 1}, {0, -1}, {1, 0}, {-1, 0} };
	while (!q.empty())
	{
		node current = q.top();
		q.pop();
		for (pair<int, int>& d : directions)
		{
			node neighbour;
			neighbour.x = current.x + d.first;
			neighbour.y = current.y + d.second;
			if (!outofbounds(neighbour) && !been[neighbour.x][neighbour.y] && g[neighbour.x][neighbour.y] != '*')
			{
				neighbour.layer = current.layer + (g[neighbour.x][neighbour.y] != g[current.x][current.y]);
				deepest_layer = max(deepest_layer, neighbour.layer);
				q.push(neighbour);
				been[neighbour.x][neighbour.y] = true;
			}
		}
	}
	cout << deepest_layer + 1;
}
Compilation message (stderr)
zoo.cpp: In function 'int main()':
zoo.cpp:36:9: warning: unused variable 'j' [-Wunused-variable]
   36 |  int i, j, deepest_layer = 0;
      |         ^| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |