1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| class Solution { public: void dfs(int x, int y, vector<vector<int>>& grid, queue<pair<int, int>> &qu) { if (x < 0 || y < 0 || x >= grid.size() || y >= grid[0].size() || grid[x][y] != 1) { return; } qu.emplace(x, y); grid[x][y] = -1; dfs(x - 1, y, grid, qu); dfs(x + 1, y, grid, qu); dfs(x, y - 1, grid, qu); dfs(x, y + 1, grid, qu); }
int shortestBridge(vector<vector<int>>& grid) { int n = grid.size(); vector<vector<int>> dirs = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (grid[i][j] == 1) { queue<pair<int, int>> qu; dfs(i, j, grid, qu); int step = 0; while (!qu.empty()) { int sz = qu.size(); for (int i = 0; i < sz; i++) { auto [x, y] = qu.front(); qu.pop(); for (int k = 0; k < 4; k++) { int nx = x + dirs[k][0]; int ny = y + dirs[k][1]; if (nx >= 0 && ny >= 0 && nx < n && ny < n) { if (grid[nx][ny] == 0) { qu.emplace(nx, ny); grid[nx][ny] = -1; } else if (grid[nx][ny] == 1) { return step; } } } } step++; } } } } return 0; } };
|