当前位置: 首页 > news >正文

代码随想录算法训练营 | 图论 | 孤岛总面积、沉没孤岛

101. 孤岛的总面积//思路大概是先计算面积,然后如果有接触路面就返回false。可能稍微多余算了太多无用面积。

#include<bits/stdc++.h>
using namespace std;
void sum(vector<vector<bool>>& finded,const vector<vector<int>>& graph,int a,int b,int& result,bool& Ifisland){
    if(a<0||b<0||a>graph.size()-1||b>graph[0].size()-1) return;
    else if(finded[a][b]==true) return;
    else if(graph[a][b]==0){
        finded[a][b]=true;
        return;
    }
    else {
        finded[a][b]=true;
        result++;
        if(a==0||b==0||a==graph.size()-1||b==graph[0].size()-1) Ifisland=false;
        sum(finded,graph,a+1,b,result,Ifisland);
        sum(finded,graph,a,b+1,result,Ifisland);
        sum(finded,graph,a-1,b,result,Ifisland);
        sum(finded,graph,a,b-1,result,Ifisland);
    }
    return;
}
int main(){
    int n,m;
    cin>>n>>m;
    vector<vector<int>> graph(n,vector<int> (m));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>graph[i][j];
        }
    }
    int sumcount=0;
    vector<vector<bool>> finded(n,vector<bool> (m));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(graph[i][j]==1){
                bool Ifisland=true;
                int result=0;
                sum(finded,graph,i,j,result,Ifisland);
                if(Ifisland) sumcount+=result;
            } 
        }
    }
    cout<<sumcount<<endl;    
}

102. 沉没孤岛//思路大致是,先遍历边框的,然后递归把连着的陆地都扫过,最后把没扫过的且为陆地的改为0。最后按题目的要求输出。

#include<bits/stdc++.h>
using namespace std;

void DFS(vector<vector<bool>>& finded,const vector<vector<int>>& graph,int i,int j){
    if(i<0||j<0||i>graph.size()-1||j>graph[0].size()-1) return;
    else if(finded[i][j]) return;
    else if(graph[i][j]==0) {
        finded[i][j]=true;
        return;
    }
    else{
        finded[i][j]=true;
        DFS(finded,graph,i+1,j);
        DFS(finded,graph,i,j+1);
        DFS(finded,graph,i-1,j);
        DFS(finded,graph,i,j-1);
    }
}

int main(){
    int n,m;
    cin>>n>>m;
    vector<vector<int>> graph(n,vector<int> (m));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>graph[i][j];
        }
    }
    vector<vector<bool>> finded(n,vector<bool> (m,false));    
    for(int i=0;i<n;i++){
        if(graph[i][0]==1&&!finded[i][0]) DFS(finded,graph,i,0);
        if(graph[i][m-1]==1&&!finded[i][m-1]) DFS(finded,graph,i,m-1);
    }  
    for(int j=0;j<m;j++){
        if(graph[0][j]==1&&!finded[0][j]) DFS(finded,graph,0,j);
        if(graph[n-1][j]==1&&!finded[n-1][j]) DFS(finded,graph,n-1,j);
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(graph[i][j]==1&&!finded[i][j]) {
                graph[i][j]=0;
                finded[i][j]=true;
            }
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m-1;j++){
            cout<<graph[i][j]<<" ";
        }
        cout<<graph[i][m-1]<<endl;
    }   
}

相关文章:

  • GPTs+RPA赋能智慧校园:构建下一代教育智能体的技术实践
  • RK3588开发笔记-fiq_debugger: cpu 0 not responding, reverting to cpu 3问题解决
  • Dify 开源大语言模型应用开发平台使用(二)
  • 软考高项笔记 1.1.1 信息
  • Raven: 2靶场渗透测试
  • ​Unity插件-Mirror使用方法(八)组件介绍(​Network Behaviour)
  • 【Linux】http 协议
  • 3427. 变长子数组求和
  • 【YOLO V5】目标检测 WSL2 AutoDL VScode SSH
  • 基于编译器特性浅析C++程序性能优化
  • Vue基础
  • 【Linux】自定协议和序列化与反序列化
  • 跨域-告别CORS烦恼
  • 【C++设计模式】第七篇:桥接模式(Bridge)
  • @PostConstruct注解的作用
  • 基于websocket的多用户网页五子棋 --- 测试报告
  • 小微企业友好方案:低成本智能客服系统如何落地
  • C# 基础知识总结(持续更新中...)
  • 数据仓库建模方法论:起源、发展与深度对比解析
  • ICLR 2025|香港浸会大学可信机器学习和推理课题组专场
  • 上海静安将发放七轮文旅消费券,住宿券最高满800元减250元
  • 男子恶意遗弃幼子获刑,最高法发布涉未成年人家庭保护典型案例
  • 腾讯一季度营收增长13%,马化腾:战略性的AI投入将带来长期回报
  • 车载抬头显示爆发在即?业内:凭借市场和产业链优势,国内供应商实现反超
  • 多条跨境铁路加速推进,谁是下一个“超级枢纽”?
  • 广东韶关一镇干部冲进交通事故火海救人,获授“见义勇为”奖励万元