IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode每日一题:934. 最短的桥(中等) bfs dfs -> 正文阅读

[数据结构与算法]LeetCode每日一题:934. 最短的桥(中等) bfs dfs

题目:

给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域。

岛 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其他 1 相连。grid 中 恰好存在两座岛 。

你可以将任意数量的 0 变为 1 ,以使两座岛连接起来,变成 一座岛 。

返回必须翻转的 0 的最小数目。

示例 1:

输入:grid = [[0,1],[1,0]]
输出:1
示例 2:

输入:grid = [[0,1,0],[0,0,0],[0,0,1]]
输出:2
示例 3:

输入:grid = [[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
?

提示:

n == grid.length == grid[i].length
2 <= n <= 100
grid[i][j] 为 0 或 1
grid 中恰有两个岛

先找出一个岛,将其重新赋值,与0和1区别开,用dfs就可以找,将找到的第一个岛放到队列中。将第一个岛的点做bfs,每做一轮答案增加一个,知道找到第二个岛结束。

class Solution {
public:
    int  n;
    int d[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
    queue<pair<int ,int > > que ;

    void dfs(int x , int y , vector<vector<int>>& grid){
        if(grid[x][y] != 1) return ;
        grid[x][y]=2;
         que.push({x,y});
        for(int i = 0 ; i < 4 ; i++ ){
            int nx = x + d[i][0] , ny = y + d[i][1] ;
            if(nx >= 0 && nx < n && ny >= 0 && ny < n )
                dfs(nx , ny ,grid);
        }
    }
    void search(vector<vector<int>>& grid){ //先找到第一个岛的一个点再开始深度遍历
        for(int i = 0 ; i < n ; i ++ )
            for(int j = 0 ; j < n ; j ++ )
                if(grid[i][j]) {
                    dfs(i,j,grid);
                    return ;
                }
    }


    int bfs(vector<vector<int>>& grid){
        int ans = 0 ;
        while (!que.empty()) {
            for (int m = que.size() ; m ; m--) {
                auto [x, y] = que.front();
                que.pop();
                for (int k = 0; k < 4; ++k) {
                    int nx = x + d[k][0], ny = y + d[k][1];
                    if (nx >= 0 && nx < n && ny >= 0 && ny < n) {
                        if (grid[nx][ny] == 1) return ans;
                        if (grid[nx][ny] == 0) {
                            grid[nx][ny] = 2;
                            que.push({nx,ny});
                        }
                    }
                }
            }//一轮结束,层数增加
            ++ans;
        }
        return ans ;
    }
    int shortestBridge(vector<vector<int>>& grid) {
        n = grid.size() ;
        search(grid);
        return bfs(grid);
    }
};
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:25:10  更:2022-10-31 12:27:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:21:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码