3
void findOneIsland(vector<vector<int>> &grid, int i, int j, queue<pair<int, int>> &q) {4
if (i < 0 || j < 0 || i == grid.size() || j == grid.size() || grid[i][j] != 1) return;8
findOneIsland(grid, i, j - 1, q);9
findOneIsland(grid, i, j + 1, q);10
findOneIsland(grid, i - 1, j, q);11
findOneIsland(grid, i + 1, j, q);13
int shortestBridge(vector<vector<int>> &grid) {15
queue<pair<int, int>> q;17
bool OneIslandFound = false;18
for (int i = 0; i < n; i++) {19
for (int j = 0; j < n; j++) {20
if (grid[i][j] == 1) {21
OneIslandFound = true;22
findOneIsland(grid, i, j, q);26
if (OneIslandFound) break;30
int i = q.front().first, j = q.front().second;32
if (i != 0 && grid[i - 1][j] < 2) {33
if (grid[i - 1][j] == 1) {37
if (grid[i - 1][j] == 0) {38
grid[i - 1][j] = grid[i][j] + 1;43
if (i != grid.size() - 1 && grid[i + 1][j] < 2) {44
if (grid[i + 1][j] == 1) {48
if (grid[i + 1][j] == 0) {49
grid[i + 1][j] = grid[i][j] + 1;54
if (j != 0 && grid[i][j - 1] < 2) {55
if (grid[i][j - 1] == 1) {59
if (grid[i][j - 1] == 0) {60
grid[i][j - 1] = grid[i][j] + 1;65
if (j != grid.size() - 1 && grid[i][j + 1] < 2) {66
if (grid[i][j + 1] == 1) {70
if (grid[i][j + 1] == 0) {71
grid[i][j + 1] = grid[i][j] + 1;