intshortestBridge(vector<vector<int>>& grid){ // find one island, then bfs queue<pair<int, int>> islandOne; int m = grid.size(), n = grid[0].size(); bool not_marked = true; for (int i = 0; i < m && not_marked; i++) { for (int j = 0; j < n; j++) { if (grid[i][j] == 1) { queue<pair<int, int>> q; q.emplace(i, j); islandOne.emplace(i, j); grid[i][j] = -1; while (!q.empty()) { auto [x, y] = q.front(); q.pop(); for (int k = 0; k < 4; k++) { int dx = x + DIRs[k][0], dy = y + DIRs[k][1]; if (dx >= 0 && dx < m && dy >= 0 && dy < n && grid[dx][dy] == 1) { grid[dx][dy] = -1; q.emplace(dx, dy); islandOne.emplace(dx, dy); } } } not_marked = false; break; } } } int step = 0; while (!islandOne.empty()) { int size = islandOne.size(); for (int i = 0; i < size; i++) { auto [x, y] = islandOne.front(); islandOne.pop(); for (int k = 0; k < 4; k++) { int dx = x + DIRs[k][0], dy = y + DIRs[k][1]; if (dx >= 0 && dx < m && dy >= 0 && dy < n) { if (grid[dx][dy] == 1) { return step; } elseif (grid[dx][dy] == 0) { grid[dx][dy] = -1; islandOne.emplace(dx, dy); } } } } step++; } return-1; } };