#include <iostream>
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> dir = {{0,1},{1,0},{-1,0},{0,-1}};
void performbfs (vector<vector<int>> & arr ,vector<vector<int>> & owner,int i,int j,int x)
{
queue<pair<int,int>> q;
q.push({i,j});
owner[i][j]=x;
while(q.size()!=0)
{
auto it = q.front();
q.pop();
int currI = it.first;
int currJ = it.second;
for(int k=0;k<4;k++)
{
int newI = currI + dir[k][0];
int newJ = currJ + dir[k][1];
if(newI>=0 && newI<arr.size() && newJ >=0 && newJ <arr[0].size() && arr[newI][newJ]==1 && owner[newI][newJ]==0)
{
owner[newI][newJ]=x;
q.push({newI,newJ});
}
}
}
}
int findminDist ( vector<vector<int>> &arr)
{
int rows = arr.size();
int cols = arr[0].size();
vector<vector<int>> owner (rows,vector<int>(cols,0));
vector<vector<int>> distance (rows,vector<int>(cols,-1));
int x= 1;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(arr[i][j]==1 && owner[i][j]==0)
{
performbfs(arr,owner,i,j,x);
x++;
}
}
}
queue<pair<int,int>> q;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(arr[i][j]==1)
{
q.push({i,j});
distance[i][j]=0;
}
}
}
int mindist = INT_MAX;
while(q.size()!=0)
{
auto it = q.front();
q.pop();
int currI = it.first;
int currJ = it.second;
for(int k=0;k<4;k++)
{
int newI = currI + dir[k][0];
int newJ = currJ + dir[k][1];
if(newI>=0 && newI<arr.size() && newJ >=0 && newJ <arr[0].size())
{
if(distance[newI][newJ]==-1)
{
distance[newI][newJ] = distance[currI][currJ] +1;
owner[newI][newJ] = owner[currI][currJ];
q.push({newI,newJ});
}
else
{
if (owner[newI][newJ] != owner[currI][currJ])
{
mindist = min (distance[newI][newJ]+distance[currI][currJ],mindist);
}
}
}
}
}
return mindist;
}
int main() {
// your code goes here
vector<vector<int>> arr = {{1, 0, 0, 0, 1},
{1, 1, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 1, 1, 1}};
int dis = findminDist (arr);
cout<<dis;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZGlyID0ge3swLDF9LHsxLDB9LHstMSwwfSx7MCwtMX19OwoKdm9pZCBwZXJmb3JtYmZzICh2ZWN0b3I8dmVjdG9yPGludD4+ICYgYXJyICx2ZWN0b3I8dmVjdG9yPGludD4+ICYgb3duZXIsaW50IGksaW50IGosaW50IHgpCnsKCQoJcXVldWU8cGFpcjxpbnQsaW50Pj4gcTsKCXEucHVzaCh7aSxqfSk7Cglvd25lcltpXVtqXT14OwoJd2hpbGUocS5zaXplKCkhPTApCgl7CgkJYXV0byBpdCA9IHEuZnJvbnQoKTsKCQlxLnBvcCgpOwoJCWludCBjdXJySSA9IGl0LmZpcnN0OwoJCWludCBjdXJySiA9IGl0LnNlY29uZDsKCQlmb3IoaW50IGs9MDtrPDQ7aysrKQoJCXsKCQkJaW50IG5ld0kgPSBjdXJySSArIGRpcltrXVswXTsKCQkJaW50IG5ld0ogPSBjdXJySiArIGRpcltrXVsxXTsKCQlpZihuZXdJPj0wICYmIG5ld0k8YXJyLnNpemUoKSAmJiBuZXdKID49MCAmJiBuZXdKIDxhcnJbMF0uc2l6ZSgpICYmIGFycltuZXdJXVtuZXdKXT09MSAmJiBvd25lcltuZXdJXVtuZXdKXT09MCkKCQl7CgkJCW93bmVyW25ld0ldW25ld0pdPXg7CgkJCXEucHVzaCh7bmV3SSxuZXdKfSk7CgkJfQoJCQoJCX0KCX0KfQoKaW50IGZpbmRtaW5EaXN0ICgJdmVjdG9yPHZlY3RvcjxpbnQ+PiAmYXJyKQp7CglpbnQgcm93cyA9IGFyci5zaXplKCk7CglpbnQgY29scyA9IGFyclswXS5zaXplKCk7Cgl2ZWN0b3I8dmVjdG9yPGludD4+IG93bmVyIChyb3dzLHZlY3RvcjxpbnQ+KGNvbHMsMCkpOwoJdmVjdG9yPHZlY3RvcjxpbnQ+PiBkaXN0YW5jZSAocm93cyx2ZWN0b3I8aW50Pihjb2xzLC0xKSk7CglpbnQgeD0gMTsKCWZvcihpbnQgaT0wO2k8cm93cztpKyspCgl7CgkJZm9yKGludCBqPTA7ajxjb2xzO2orKykKCQl7CgkJCWlmKGFycltpXVtqXT09MSAmJiBvd25lcltpXVtqXT09MCkKCQkJewoJCQkJcGVyZm9ybWJmcyhhcnIsb3duZXIsaSxqLHgpOwoJCQkJeCsrOwoJCQl9CgkJfQoJfQoJcXVldWU8cGFpcjxpbnQsaW50Pj4gcTsKCWZvcihpbnQgaT0wO2k8cm93cztpKyspCgl7CgkJZm9yKGludCBqPTA7ajxjb2xzO2orKykKCQl7CgkJCWlmKGFycltpXVtqXT09MSkKCQkJewoJCQkJCXEucHVzaCh7aSxqfSk7CgkJCQkJZGlzdGFuY2VbaV1bal09MDsKCQkJfQoJCX0KCX0KCWludCBtaW5kaXN0ID0gSU5UX01BWDsKCXdoaWxlKHEuc2l6ZSgpIT0wKQoJewoJCWF1dG8gaXQgPSBxLmZyb250KCk7CgkJcS5wb3AoKTsKCQlpbnQgY3VyckkgPSBpdC5maXJzdDsKCQlpbnQgY3VyckogPSBpdC5zZWNvbmQ7CgkJZm9yKGludCBrPTA7azw0O2srKykKCQl7CgkJCWludCBuZXdJID0gY3VyckkgKyBkaXJba11bMF07CgkJCWludCBuZXdKID0gY3VyckogKyBkaXJba11bMV07CgkJaWYobmV3ST49MCAmJiBuZXdJPGFyci5zaXplKCkgJiYgbmV3SiA+PTAgJiYgbmV3SiA8YXJyWzBdLnNpemUoKSkKCQl7CgkJCWlmKGRpc3RhbmNlW25ld0ldW25ld0pdPT0tMSkKCQkJewoJCQkJZGlzdGFuY2VbbmV3SV1bbmV3Sl0gPSBkaXN0YW5jZVtjdXJySV1bY3VyckpdICsxOwoJCQkJb3duZXJbbmV3SV1bbmV3Sl0gPSBvd25lcltjdXJySV1bY3VyckpdOyAKCQkJCXEucHVzaCh7bmV3SSxuZXdKfSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZiAob3duZXJbbmV3SV1bbmV3Sl0gIT0gb3duZXJbY3VyckldW2N1cnJKXSkKCQkJCXsKCQkJCQltaW5kaXN0ID0gbWluIChkaXN0YW5jZVtuZXdJXVtuZXdKXStkaXN0YW5jZVtjdXJySV1bY3VyckpdLG1pbmRpc3QpOwoJCQkJfQoJCQl9CgkJfQoJCQoJCX0KCX0KCQoJcmV0dXJuIG1pbmRpc3Q7CgkKfQoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgl2ZWN0b3I8dmVjdG9yPGludD4+IGFyciA9IHt7MSwgMCwgMCwgMCwgMX0sICAKezEsIDEsIDAsIDAsIDB9LCAgCnswLCAwLCAwLCAwLCAwfSwgIAp7MCwgMCwgMSwgMSwgMX19OwppbnQgZGlzID0gZmluZG1pbkRpc3QgKGFycik7CmNvdXQ8PGRpczsKcmV0dXJuIDA7Cn0=