当前位置: 首页 > 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;}   
}

http://www.lryc.cn/news/547690.html

相关文章:

  • 迷你世界脚本出生点接口:Spawnport
  • 双链路提升网络传输的可靠性扩展可用带宽
  • Pytest测试用例执行跳过的3种方式
  • 【蓝桥杯】每天一题,理解逻辑(3/90)【Leetcode 快乐数】
  • 深度学习Save Best、Early Stop
  • 数据库与存储优化
  • Android15请求动态申请存储权限完整示例
  • C/C++蓝桥杯算法真题打卡(Day3)
  • 【数据结构与算法】Java描述:第二节:LinkedList 链表
  • LLM run
  • k8s面试题总结(十)
  • android中activity1和activity2中接收定时消息
  • Non-Homophilic Graph Pre-Training and Prompt Learning
  • Ollama 框架本地部署教程:开源定制,为AI 项目打造专属解决方案!
  • unittest框架 核心知识的系统复习及与pytest的对比
  • vue面试宝典之二
  • ESLint 深度解析:原理、规则与插件开发实践
  • 洛谷P1091
  • 随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)
  • 江科大51单片机笔记【9】DS1302时钟可调时钟(下)
  • ssm_mysql_暖心家装平台
  • 一周学会Flask3 Python Web开发-SQLAlchemy简介及安装
  • < 自用文儿 > DELETED 设置速读 in Ubuntu24
  • 自动化同步多服务器数据库表结构
  • 深入理解 HTML 元素:构建网页的基础
  • 黄昏时间户外街拍人像Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • OCPP扩展机制与自定义功能开发:协议灵活性设计与实践 - 慧知开源充电桩平台
  • 哈希查找与深度优先遍历深度解析
  • 【powerjob】 powerjobserver注册服务IP错误
  • Flutter底层实现