【LetMeFly】934.最短的桥
力扣题目链接:https://leetcode.cn/problems/shortest-bridge/
在给定的二维二进制数组 A
中,存在两座岛。(岛是由四面相连的 1
形成的一个最大组。)
现在,我们可以将 0
变为 1
,以使两座岛连接起来,变成一座岛。
返回必须翻转的 0
的最小数目。(可以保证答案至少是 1
。)
示例 1:
输入:A = [[0,1],[1,0]]
输出:1
示例 2:
输入:A = [[0,1,0],[0,0,0],[0,0,1]]
输出:2
示例 3:
输入:A = [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]]
输出:1
提示:
2 <= A.length == A[0].length <= 100
A[i][j] == 0
或 A[i][j] == 1
方法一:广搜
在熟练掌握了图的搜索后,这道题也不难,两次搜索就可以了。
第一次搜索的时候,我们从任意一个“1”开始,当四联通(上下左右)还是1时,继续搜索,直到把一个“岛”搜完。
这样,我们就得到了一个完整的“岛”
第二次搜索的时候,我们从第一次得到的“岛”开始,一圈一圈地往外拓展。每走一步,答案加一。直到遇到新的“岛”为止
- 时间复杂度$O(n^2)$,一共进行了两次搜索
- 空间复杂度$O(n^2)$,空间复杂度主要来自队列
AC代码
C++
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| typedef pair<int, int> pii; const static int directions[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; class Solution { private: int n;
queue<pii> getIslandBy1Node(int x, int y, vector<vector<int>>& grid) { grid[x][y] = -1; queue<pii> q, ans; q.push({x, y}); ans.push({x, y}); while (q.size()) { pii thisNode = q.front(); q.pop(); for (int d = 0; d < 4; d++) { int tx = thisNode.first + directions[d][0]; int ty = thisNode.second + directions[d][1]; if (tx >= 0 && tx < n && ty >= 0 && ty < n) { if (grid[tx][ty] == 1) { grid[tx][ty] = -1; q.push({tx, ty}); ans.push({tx, ty}); } } } } return ans; } public: int shortestBridge(vector<vector<int>>& grid) { n = grid.size(); queue<pii> q; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (grid[i][j]) { q = getIslandBy1Node(i, j, grid); goto loop; } } } loop:; int ans = 0; while (true) { for (int i = q.size(); i > 0; i--) { pii thisNode = q.front(); q.pop(); for (int d = 0; d < 4; d++) { int tx = thisNode.first + directions[d][0]; int ty = thisNode.second + directions[d][1]; if (tx >= 0 && tx < n && ty >= 0 && ty < n) { if (grid[tx][ty] == 1) { return ans; } if (grid[tx][ty] == 0) { grid[tx][ty] = -1; q.push({tx, ty}); } } } } ans++; } } };
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127509391