#include <iostream>
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> dir = {{1,0},{0,1},{-1,0},{0,-1}};
void dfs (vector<vector<int>> &arr,int rows,int cols,int cnt,int i,int j)
{
queue<pair<int,int>> q;
q.push({i,j});
arr[i][j]==cnt;
while(q.size()>0)
{
auto currPair = q.front();
q.pop();
int currI = currPair.first;
int currJ = currPair.second;
arr[currI][currJ]=cnt;
for(int k=0;k<=3;k++)
{
int newI = currI + dir[k][0];
int newJ = currJ + dir[k][1];
if(newI>=0 && newI<rows && newJ>=0 && newJ<cols && arr[newI][newJ]==1)
{
q.push({newI,newJ});
}
}
}
}
int findClosestIslandDistance(vector<vector<int>> arr)
{
int rows = arr.size();
int cols = arr[0].size();
vector<vector<int>> dist (rows,vector<int>(cols,0));
// mark all islands with identifier
int cnt =1;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(arr[i][j]==1)
{
cnt++;
dfs(arr,rows,cols,cnt,i,j);
}
}
}
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
cout<<arr[i][j]<<" ";
}
cout<<"\n";
}
queue<pair<int,int>> q;
int minDist = INT_MAX;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(arr[i][j]>=2)
{
q.push({i,j});
}
}
}
while(q.size()>0)
{
auto currPair = q.front();
q.pop();
int currI = currPair.first;
int currJ = currPair.second;
for(int k=0;k<=3;k++)
{
int newI = currI + dir[k][0];
int newJ = currJ + dir[k][1];
if(newI>=0 && newI<rows && newJ>=0 && newJ<cols)
{
if(arr[newI][newJ]==0)
{
arr[newI][newJ] = arr[currI][currJ];
dist[newI][newJ] = dist[currI][currJ]+1;
q.push({newI,newJ});
}
else if(arr[newI][newJ] != arr[currI][currJ])
{
minDist = min(minDist,dist[currI][currJ] + dist[newI][newJ]);
}
}
}
}
return minDist;
}
int main() {
// your code goes here
vector<vector<int>> arr = {{1, 1, 0, 1, 1},
{1, 1, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 1, 1, 1}};
cout<<findClosestIslandDistance(arr);
}
/*
for(int key : mp.keyset())
{
log .output (key,mp.get(key))
}
*/
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZGlyID0ge3sxLDB9LHswLDF9LHstMSwwfSx7MCwtMX19Owp2b2lkIGRmcyAodmVjdG9yPHZlY3RvcjxpbnQ+PiAmYXJyLGludCByb3dzLGludCBjb2xzLGludCBjbnQsaW50IGksaW50IGopCnsKCXF1ZXVlPHBhaXI8aW50LGludD4+IHE7CglxLnB1c2goe2ksan0pOwoJYXJyW2ldW2pdPT1jbnQ7Cgl3aGlsZShxLnNpemUoKT4wKQoJewoJCWF1dG8gY3VyclBhaXIgPSBxLmZyb250KCk7CgkJcS5wb3AoKTsKCQlpbnQgY3VyckkgPSBjdXJyUGFpci5maXJzdDsKCQlpbnQgY3VyckogPSBjdXJyUGFpci5zZWNvbmQ7CgkJYXJyW2N1cnJJXVtjdXJySl09Y250OwoJCWZvcihpbnQgaz0wO2s8PTM7aysrKQoJCXsKCQkJaW50IG5ld0kgPSBjdXJySSArIGRpcltrXVswXTsKCQkJaW50IG5ld0ogPSBjdXJySiArIGRpcltrXVsxXTsKCQkJaWYobmV3ST49MCAmJiBuZXdJPHJvd3MgJiYgbmV3Sj49MCAmJiBuZXdKPGNvbHMgJiYgYXJyW25ld0ldW25ld0pdPT0xKQoJCQl7CgkJCQlxLnB1c2goe25ld0ksbmV3Sn0pOwoJCQl9CgkJfQoJfQp9CgppbnQgZmluZENsb3Nlc3RJc2xhbmREaXN0YW5jZSh2ZWN0b3I8dmVjdG9yPGludD4+IGFycikKewoJaW50IHJvd3MgPSBhcnIuc2l6ZSgpOwoJaW50IGNvbHMgPSBhcnJbMF0uc2l6ZSgpOwoJdmVjdG9yPHZlY3RvcjxpbnQ+PiBkaXN0IChyb3dzLHZlY3RvcjxpbnQ+KGNvbHMsMCkpOwoJLy8gbWFyayBhbGwgaXNsYW5kcyB3aXRoIGlkZW50aWZpZXIKCWludCBjbnQgPTE7Cglmb3IoaW50IGk9MDtpPHJvd3M7aSsrKQoJewoJCWZvcihpbnQgaj0wO2o8Y29scztqKyspCgkJewoJCQlpZihhcnJbaV1bal09PTEpCgkJCXsKCQkJCWNudCsrOwoJCQkJZGZzKGFycixyb3dzLGNvbHMsY250LGksaik7CgkJCX0KCQl9Cgl9CgkKCWZvcihpbnQgaT0wO2k8cm93cztpKyspCgl7CgkJZm9yKGludCBqPTA7ajxjb2xzO2orKykKCQl7CgkJCWNvdXQ8PGFycltpXVtqXTw8IiAiOwoJCX0KCQljb3V0PDwiXG4iOwoJfQoJcXVldWU8cGFpcjxpbnQsaW50Pj4gcTsKCWludCBtaW5EaXN0ID0gSU5UX01BWDsKCWZvcihpbnQgaT0wO2k8cm93cztpKyspCgl7CgkJZm9yKGludCBqPTA7ajxjb2xzO2orKykKCQl7CgkJCWlmKGFycltpXVtqXT49MikKCQkJewoJCQkJcS5wdXNoKHtpLGp9KTsKCQkJfQoJCX0KCQkKCX0KCQl3aGlsZShxLnNpemUoKT4wKQoJewoJCWF1dG8gY3VyclBhaXIgPSBxLmZyb250KCk7CgkJcS5wb3AoKTsKCQlpbnQgY3VyckkgPSBjdXJyUGFpci5maXJzdDsKCQlpbnQgY3VyckogPSBjdXJyUGFpci5zZWNvbmQ7CgkJZm9yKGludCBrPTA7azw9MztrKyspCgkJewoJCQlpbnQgbmV3SSA9IGN1cnJJICsgZGlyW2tdWzBdOwoJCQlpbnQgbmV3SiA9IGN1cnJKICsgZGlyW2tdWzFdOwoJCQlpZihuZXdJPj0wICYmIG5ld0k8cm93cyAmJiBuZXdKPj0wICYmIG5ld0o8Y29scykKCQkJewoJCQkJaWYoYXJyW25ld0ldW25ld0pdPT0wKQoJCQkJewoJCQkJCWFycltuZXdJXVtuZXdKXSA9IGFycltjdXJySV1bY3VyckpdOwoJCQkJCWRpc3RbbmV3SV1bbmV3Sl0gPSBkaXN0W2N1cnJJXVtjdXJySl0rMTsKCQkJCQlxLnB1c2goe25ld0ksbmV3Sn0pOwoJCQkJfQoJCQkJZWxzZSBpZihhcnJbbmV3SV1bbmV3Sl0gIT0gYXJyW2N1cnJJXVtjdXJySl0pCgkJCQl7CgkJCQkJbWluRGlzdCA9IG1pbihtaW5EaXN0LGRpc3RbY3VyckldW2N1cnJKXSArIGRpc3RbbmV3SV1bbmV3Sl0pOwoJCQkJfQoJCQl9CgkJfQoJfQoJCglyZXR1cm4gbWluRGlzdDsKCQp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKdmVjdG9yPHZlY3RvcjxpbnQ+PiBhcnIgPSB7ezEsIDEsIDAsIDEsIDF9LCAKezEsIDEsIDAsIDAsIDB9LCAgCnswLCAwLCAwLCAwLCAwfSwgIAp7MCwgMCwgMSwgMSwgMX19OwoJY291dDw8ZmluZENsb3Nlc3RJc2xhbmREaXN0YW5jZShhcnIpOwp9CgovKgpmb3IoaW50IGtleSA6IG1wLmtleXNldCgpKQp7Cglsb2cgLm91dHB1dCAoa2V5LG1wLmdldChrZXkpKQp9CgoqLw==