代码随想录算法训练营第56,57天 [卡玛网98. 所有可达路径, 卡玛网99. 岛屿数量,卡玛网100. 岛屿的最大面积]

代码随想录算法训练营第56,57天 [卡玛网98. 所有可达路径, 卡玛网99. 岛屿数量,卡玛网100. 岛屿的最大面积]


一、卡玛网98. 所有可达路径

链接: 代码随想录.
思路:邻接矩阵和邻接表两种方法
做题状态:看解析后做出来了

// 邻接矩阵
#include<iostream>
#include<vector>
using namespace std;
 
vector<vector<int>> result;
vector<int> path;
 
void dfs(vector<vector<int>> &graph,int x,int n){
    if(x == n){
        result.push_back(path);
        return;
    }
     
    for(int i = 1;i<=n;i++){
        if(graph[x][i] == 1){
            path.push_back(i);
            dfs(graph,i,n);
            path.pop_back();
        }
    }
}
 
int main(){
    int N;int M;
    int s;int t;
    cin >> N >> M;
    vector<vector<int>> graph(N+1,vector<int>(N+1,0));
    while(M--){
        cin>>s>>t;
        graph[s][t] = 1;
    }
    path.push_back(1);
    dfs(graph,1,N);
    if(result.size() == 0){
        cout << -1 <<endl;
    }
    for(vector<int> p : result){
        for(int i =0;i<p.size()-1;i++){
            cout << p[i] <<" ";
        }
        cout << p[p.size()-1]<<endl;
    }
    return 0;
}

二、卡玛网99. 岛屿数量

链接: 代码随想录.
思路:深搜广搜
做题状态:看解析后做出来了

// 深搜
#include<iostream>
#include<vector>
using namespace std;
int dir[4][2] = {{1,0},{0,-1},{-1,0},{0,1}};
 
void dfs(vector<vector<int>> &graph,vector<vector<int>> &visited,int i,int j ){
    for(int k =0;k<4;k++){
        int next_x = i+dir[k][0];
        int next_y = j+dir[k][1];
        if(next_x < 0 || next_x >= graph.size() || next_y < 0 || next_y >= graph[0].size()){
            continue;
        }
        if(visited[next_x][next_y] == 0 && graph[next_x][next_y] == 1){
            visited[next_x][next_y] = 1;
            dfs(graph,visited,next_x,next_y);
        }
    }
}
 
 
int main(){
    int m;int n;
    cin >> n >> m;
    vector<vector<int>> graph(n,vector<int>(m,0));
    int x;
    int result = 0;
    for(int i = 0;i<n;i++){
        for(int j = 0;j<m;j++){
            cin >> x;
            if(x == 1){
                graph[i][j] = 1;
            }
        }
    }
    vector<vector<int>> visited(n,vector<int>(m,0));
     
    for(int i = 0;i<n;i++){
        for(int j = 0;j<m;j++){
            if(graph[i][j] == 1 && visited[i][j] == 0){
                visited[i][j] = 1;
                result++;
                dfs(graph,visited,i,j);
            }
        }
    }
     
    cout << result <<endl;
}
// 广搜
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};
void bfs(vector<vector<int>> &graph,vector<vector<int>> &visited ,int x,int y){
    queue<pair<int,int>> que;
    que.push({x,y});
    visited[x][y] = 1;
    while(!que.empty()){
        pair<int,int> cur = que.front();
        que.pop();
        int cur_x = cur.first;
        int cur_y = cur.second;
        for(int i = 0;i<4;i++){
            int next_x = cur_x+dir[i][0];
            int next_y = cur_y+dir[i][1];
            if(next_x < 0 || next_x >= graph.size() || next_y < 0 || next_y >= graph[0].size()){
                continue;
            }
            if(graph[next_x][next_y] == 1 && visited[next_x][next_y] == 0){
                visited[next_x][next_y] = 1;
                que.push({next_x,next_y});
            }
        }
    }
}
 
int main(){
    int N;
    int M;
    cin >> N >> M;
    vector<vector<int>> graph(N,vector<int>(M,0));
    vector<vector<int>> visited(N,vector<int>(M,0));
    for(int i = 0;i<N;i++){
        for(int j = 0;j<M;j++){
            cin >>graph[i][j];
        }
    }
     
    int result = 0;
     
    for(int i = 0;i<N;i++){
        for(int j = 0;j<M;j++){
            if(graph[i][j] == 1 && visited[i][j] == 0){
                visited[i][j] = 1;
                result++;
                bfs(graph,visited,i,j);
            }
        }
    }
    cout << result <<endl;
}

三、卡玛网100. 岛屿的最大面积

链接: 代码随想录.
思路:深搜广搜
做题状态:看解析后做出来了

// 深搜
#include<iostream>
#include<vector>
using namespace std;
int count = 0;
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
void dfs(vector<vector<int>> &graph,vector<vector<int>> &visited,int x,int y){
    for(int i = 0;i<4;i++){
        int next_x = x+dir[i][0];
        int next_y = y+dir[i][1];
        if(next_x < 0 || next_x >= graph.size() || next_y < 0 ||next_y >= graph[0].size()){
            continue;
        }
        if(graph[next_x][next_y] == 1 && visited[next_x][next_y] == 0){
            visited[next_x][next_y] = 1;
            count++;
            dfs(graph,visited,next_x,next_y);
        }
    }
}
 
int main(){
    int n;int m;
    cin >> n >> m;
    vector<vector<int>> graph(n,vector<int>(m,0)); 
    vector<vector<int>> visited(n,vector<int>(m,0)); 
    for(int i = 0;i < n;i++){
        for(int j = 0;j < m;j++){
            cin >> graph[i][j];
        }
    }
    int result = 0;
    for(int i = 0;i<n;i++){
        for(int j = 0;j<m;j++){
            if(graph[i][j] == 1 && visited[i][j] == 0){
                count = 1;
                visited[i][j] = 1;
                dfs(graph,visited,i,j);
                result = max(result,count);
            }
        }
    }
     
    cout << result <<endl;
}
// 广搜
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int count = 0;
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
void bfs(vector<vector<int>> &graph,vector<vector<int>> &visited,int x,int y){
   queue<pair<int,int>> que;
   que.push({x,y});
   visited[x][y] = 1;
   count++;
   while(!que.empty()){
       pair<int,int> cur = que.front();
       que.pop();
       int cur_x = cur.first;
       int cur_y = cur.second;
       for(int i = 0;i<4;i++){
           int next_x = cur_x + dir[i][0];
           int next_y = cur_y + dir[i][1];
           if(next_x < 0 || next_x >= graph.size() || next_y<0||next_y>=graph[0].size()){
               continue;
           }
           if(graph[next_x][next_y] == 1 && visited[next_x][next_y] == 0){
                visited[next_x][next_y] = 1;
                que.push({next_x,next_y});
                count++;
           }
           
       }
   }
}
 
int main(){
    int n;int m;
    cin >> n >> m;
    vector<vector<int>> graph(n,vector<int>(m,0)); 
    vector<vector<int>> visited(n,vector<int>(m,0)); 
    for(int i = 0;i < n;i++){
        for(int j = 0;j < m;j++){
            cin >> graph[i][j];
        }
    }
     
    int result = 0;
    for(int i = 0;i<n;i++){
        for(int j = 0;j<m;j++){
            if(graph[i][j] == 1 && visited[i][j] == 0){
                count = 0;
                visited[i][j] = 1;
                bfs(graph,visited,i,j);
                result = max(result,count);
            }
        }
    }
     
    cout << result <<endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/769544.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金融科技企业的数据治理与合规挑战

随着科技的发展&#xff0c;金融科技行业在我国得到了迅猛发展。金融科技创新不仅为消费者带来了便捷的金融服务&#xff0c;也极大地提高了金融行业的运营效率。然而&#xff0c;在金融科技发展的同时&#xff0c;数据治理与合规挑战也日益显现。本文将深入探讨金融科技企业在…

python如何安装各种库(保姆级教程)

使用Python爬虫时需要安装各种依赖库。安装一共有四种方法&#xff1a; 一、使用pip命令在线安装 二、在pycharm中在线安装 三、使用库的安装包本地安装 四、安装anaconda—anaconda中包含一般使用的所有库 一&#xff1a;pip安装 此步骤需要提前安装好python环境和pip。…

学习笔记——动态路由——OSPF(邻接/邻居)

十、OSPF的邻接/邻居 1、OSPF路由器之间的关系 (1)基本介绍 在OSPF网络中&#xff0c;为了交换链路状态信息和路由信息&#xff0c;邻居设备之间首先要建立邻接关系&#xff0c;邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。 OSPF路由器的两种关系&#x…

大模型概述-定义/分类/训练/应用

大模型概述 随着时代的发展, 大模型各个领域的应用正在不断扩大. 本文尽力梳理各种材料, 将从概念定义, 类型分类, 训练以及应用等方面对大模型进行一个简要的概述. 如果你想了解大模型但是却缺乏基础的知识或者觉得无从下手, 那么阅读该文章可能对你有所帮助. 如果想了解更多…

linux深度deepin基于rsync和apt-mirror同步软件源及构建本地内网源

目录 一、rsync方式二、apt-mirror方式1.安装apt-mirror2.配置apt-mirror(/etc/apt/mirror.list)3.新建存放目录开始下载 3.发布mirror站点 一、rsync方式 参考官方文档地址&#xff1a; https://www.deepin.org/index/docs/wiki/05_HOW-TO/08_%E9%95%9C%E5%83%8F%E5%8A%A0%E9%…

机器学习原理之 -- 最近邻算法分类:由来及原理详解

最近邻算法&#xff08;k-Nearest Neighbors&#xff0c;k-NN&#xff09;是一种简单且直观的分类算法&#xff0c;广泛应用于分类和回归问题。由于其易于理解和实现&#xff0c;k-NN在数据挖掘、模式识别和机器学习领域中占据重要地位。本文将详细介绍最近邻算法的由来、基本原…

LabVIEW干涉仪测向系统

开发了一套基于LabVIEW的软件系统&#xff0c;结合硬件设备&#xff0c;构建一个干涉仪测向实验教学平台。该平台应用于信号处理课程&#xff0c;帮助学生将理论知识与实际应用相结合&#xff0c;深化对信号处理核心概念的理解和应用。 项目背景&#xff1a; 当前信号处理教学…

02 数据加工层 如何搭建用户与内容的标准规范体系

你好&#xff0c;我是周大壮。 01 讲我们提到了个性化流量分发体系的四个阶段&#xff0c;并着重讲解了数据采集阶段的内容。那么&#xff0c;这一讲我们主要围绕数据加工阶段的内容进行详细讲解。 在课程开始之前&#xff0c;我们先举一个场景进行说明。 近年来&#xff0c…

学习springMVC

第四章 Spring MVC 第一节 Spring MVC 简介 1. Spring MVC SpringMVC是一个Java 开源框架&#xff0c; 是Spring Framework生态中的一个独立模块&#xff0c;它基于 Spring 实现了Web MVC&#xff08;数据、业务与展现&#xff09;设计模式的请求驱动类型的轻量级Web框架&am…

昇思25天学习打卡营第7天|深度学习流程全解析:从模型训练到评估

目录 构建数据集 定义神经网络模型 定义超参、损失函数和优化器 超参 损失函数 优化器 训练与评估 构建数据集 首先从数据集 Dataset加载代码&#xff0c;构建数据集。 代码如下&#xff1a; #引入了必要的库和模块&#xff0c;像 mindspore 以及相关的数据处理模块等等。…

vue高德地图使用

先根据官方方法给vue项目引入高德 高德文档地址 做好准备后使用 初始化地图 AMap.plugin(AMap.MoveAnimation, () >{//地图this.map new AMap.Map("mapContainer", {resizeEnable: true,center: [116.397447,39.909176],//地图中心坐标zoom:12,//缩放值});this.…

《NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构》

NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构 注意&#xff01;&#xff1a;本文创作仅根据个人理解和网络信息&#xff0c;如有错误恳请指正&#xff01;谢谢&#xff01; 大家好&#xff0c;今天分享的文献是2024年5月发表在Nature上的“ Accurate structure …

Qt/C++编写地图应用/离线地图下载/路径规划/轨迹回放/海量点/坐标转换

一、前言说明 这个地图组件写了很多年了&#xff0c;最初设计的比较粗糙&#xff0c;最开始只是为了满足项目需要&#xff0c;并没有考虑太多拓展性&#xff0c;比如最初都是按照百度地图写死在代码中&#xff0c;经过这几年大量的现场实际应用&#xff0c;以及大量的用户提出…

深度学习标注文件格式转换

json转xml 原始数据集文件夹中图片格式为bmp&#xff0c;标注文件为json&#xff0c;图片和标注文件放在同一个文件夹下面&#xff0c;将json转为xml格式&#xff0c;图片和标注文件分别存放在一个文件夹下面。 headstr """\ <annotation><folder>…

C语言 -- 函数

C语言 -- 函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return 语句6. 数组做…

页面加载503 Service Temporarily Unavailable异常

最近发现网页刷新经常503&#xff0c;加载卡主&#xff0c;刷新页面就正常了。 研究之后发现是页面需要的js文件等加载失败了。 再研究之后发现是nginx配置的问题。 我之前为了解决一个漏洞检测到目标主机可能存在缓慢的HTTP拒绝服务攻击 把nginx的连接设置了很多限制&#…

通过easyexcel导入数据,添加表格参数的校验,同表格内校验以及和已有数据的校验

引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version><scope>compile</scope></dependency> 需要导入到某个目录下 如果产品名称相同&#xff0c…

这玩意终于有免费的了———Navicat Premium Lite

免费啦&#xff01;&#xff01;&#xff01;X&#xff01;&#xff01;&#xff01; 免费啦&#xff01;&#xff01;&#xff01;X&#xff01;&#xff01;&#xff01; 免费啦&#xff01;&#xff01;&#xff01;X&#xff01;&#xff01;&#xff01; 去下载吧&…

基于Teager-Kaiser能量算子的肌电信号降噪方法(MATLAB)

Teager-Kaiser能量算子是一种非线性算子&#xff0c;它能有效提取信号的瞬时能量&#xff0c;对信号瞬时变化具有良好的时间分辨率。Teager-Kaiser能量算子只需信号三个采样点&#xff0c;即可快速跟踪信号的幅值和角频率变化&#xff0c;计算实现简单、运算量小。 clc clear a…

【 香橙派 AIpro评测】大语言模型实战教程:香橙派 AIpro部署LLMS大模型实站(保姆级教学)

引言 OrangePi AIpro 这块板子作为业界首款基于昇腾深度研发的AI开发板&#xff0c;一经发布本博主就火速去关注了&#xff0c;其配备的 8/20TOPS澎湃算力是目前开发板市场中所具备的最大算力&#xff0c;可谓是让我非常眼馋啊&#xff01;这么好的板子那必须拿来用用&#xff…
最新文章