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

代码随想录60期day56

  1. 孤岛的总面积
    //dfs
    #include<iostream>
    #include<vector>
    using namespace std;int dir[4][2] = {-1,0,0,-1,1,0,0,1};void dfs(vector<vector<int>>&grid, int x, int y ){grid[x][y] = 0;for(int i = 0 ; i < 4;i++){int nextx = x + dir[i][0];int nexty = y + dir[i][1];if(newtx < 0 || nextx >= grid.size() || nexty <0 || nexty >= grid[0].size()) continue;if(grid[nextx][nexty] == 0) continue;dfs(grid,nextx,nexty);}return;
    }int main(){int n,m;cin>>n>>m;vector<vector<int>>grid(n,vector<int>(m,0));for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){cin>>grid[i][j];}}for(int i = 0;i<n;i++){if(grid[i][0] == 1) dfs(grid,i,0);if(grid[i][m-1] ==1) dfs(grid,i,m-1);}for(int j = 0;j<m;j++){if(grid[0][j] ==1) dfs(grid,0,j);if(grid[n-1][j] == 1) dfs(grid,n-1,j);}int count = 0;for(int i = 0 ; i<n;i++){for(int j = 0;j <m;j++){if(grid[i][j] ==1) count++;}}cout<<count<<endl;
    }
    //bfs
    #include<iostream>
    #include<vector>
    #include<queue>
    using namespace std;int dir[4][2] = {-1,0,0,-1,1,0,0,1};void bfs(vector<vector<int>>&grid, int x, int y ){queue<pair<int,int>>que;que.push({x,y});grid[x][y] = 0; while(!que.empty()){pair<int,int>cur = que.front();que.pop();int curx = cur.first;int cury = cur.second;for(int i = 0;i < 4;i++){int nextx = curx + dir[i][0];int nexty = cury = dir[i][1];if(nextx < 0 || nextx >= grid.size() ||  nexty <0 || nexty >=grid[0].size()) continue;if(grid[nextx][nexty] == 1){que.push({nextx,nexty});grid[nextx][nexty] = 0;}}}
    }int main(){int n,m;cin>>n>>m;vector<vector<int>>grid(n,vector<int>(m,0));for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){cin>>grid[i][j];}}for(int i = 0;i<n;i++){if(grid[i][0] == 1) bfs(grid,i,0);if(grid[i][m-1] ==1) bfs(grid,i,m-1);}for(int j = 0;j<m;j++){if(grid[0][j] ==1) bfs(grid,0,j);if(grid[n-1][j] == 1) bfs(grid,n-1,j);}int count = 0;for(int i = 0 ; i<n;i++){for(int j = 0;j <m;j++){if(grid[i][j] ==1) count++;}}cout<<count<<endl;
    }

    102 沉没孤岛

    #include<iostream>
    #include<vector>
    using namespace std;int dir[4][2] = {-1,0,0,-1,1,0,0,1};
    void dfs(vector<vector<int>>&grid,int x,int y){grid[x][y] = 2;for(int i = 0 ; i<4;i++){int nextx = x + dir[i][0];int nexty = y + dir[i][1];if(nextx < 0 || nextx >= grid.size() || nexty < 0 || nexty >= grid[0].size()) continue;if(grid[nextx][nexty] == 0 || grid[nextx][nexty] == 2) continue;dfs(grid,nextx,nexty);}
    }int main(){int n,m;cin>>n>>m;vecotr<vector<int>>grid(n,vector<int>(m,0));for(int i =0 ;i<n;i++){for(int j = 0;j<m;j++){cin>>grid[i][j];}}// leftmost,rightmost ->middlefor(int i = 0;i<n;i++){if(grid[i][0] == 1) dfs(grid,i,0);if(grid[i][m-1] == 1) dfs(grid,i,m-1);}// uppermost,bottommost ->middlefor(int j = 0 ; j<m;j++){if(grid[0][j] == 1) dfs(grid,0,j);if(grid[n-1][j] == 1) dfs(grid,n-1,j);}for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){if(grid[i][j] ==1) grid[i][j] =0;if(grid[i][j] ==2) grid[i][j] =1;}}for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){cout<<grid[i][j]<<" ";}}cout<<endl;
    }
    
    1. 水流问题
    #include<iostream>
    #include<vector>
    using namespace std;
    int n,m;int dir[4][2] = {-1,0,0,-1,1,0,0,1};void dfs(vector<vector<int>>&grid, vector<vector<boo>>&visited, int x, int y){if(visited[x][y])  return;visited[x][y] = true;for(int i = 0;i<4;i++){int nextx = x + dir[i][0];int nexty = y + dir[i][1];if(nextx < 0 || nextx >=n || nexty < 0 || nexty >=m) continue;if(grid[x][y] >grid[nextx][nexty]) continue;dfs(grid,visited,nextx,nexty);}return;
    }int main(){cin>>n>>m;vector<vector<int>>grid(n,vector<int>(m,0));for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){cin>>grid[i][j];}}vector<vector<bool>>firstBorder(n,vector<bool>(m,false));vector<vector<bool>secondBorder(n,vector<bool>(m,false));for(int i = 0;i<n;i++){dfs(grid,firstBorder,i,0);dfs(grid,secondBorder,i,m-1);}for(int j = 0;j<m;j++){dfs(grid,firstBorder,0,j);dfs(grid,secondBorder,n-1,j);}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {// 如果这个节点,从第一组边界和第二组边界出发都遍历过,就是结果if (firstBorder[i][j] && secondBorder[i][j]) cout << i << " " << j << endl;;}}}

    104.建造最大岛屿

    #include<iostream>
    #include<vector>
    #include<unordered_set>
    #include<unordered_map>using namespace std;
    int n,m;
    int count;int dir[4][2] = {0,1,1,0,-1,0,0,1};void dfs(vecotr<vector<int>>&grid,vector<vector<bool>>&visited,int x,int y,int mark){if(visited[x][y] || grid[x][y] == 0) return;visited[x][y] = true;grid[x][y] = mark;count++;for(int i = 0;i<4;i++){int nextx = x + dir[i][0];int nexty = y + dir[i][1];if(nextx < 0 || nextx >= n || nexty < 0 || nexty >=m) continue;dfs(grid,visited,nextx,nexty,mark);}
    }int main()
    {cin>>n>>m;vector<vector<int>>grid(n,vector<int>(m,0));for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){cin>>grid[i][j];}}vector<vector<bool>>visited(n,vector<bool>(m,false));unordered_map<int,int>gridNum;int mark = 2;bool isAllGrid = true;for(int i = 0; i<n;i++){for(int j = 0;j<m;j++){if(grid[i][j]) isAllGrid = false;if(!visited[i][j] && grid[i][j] == 1){count = 0;dfs(grid,visited,i,j,mark);gridNum[mark] = count;mark++;}}}if(isAllGrid){cout<<n*m<<endl;return 0;}int result = 0;unordered_set<int>visitedGrid;for(int i = 0;i<n;i++){for(int j = 0; j<m;j++){count = 1;visitedGrid.clear();if(grid[i][j] == 0){for(int k = 0 ; k<4;k++){int neari = i + dir[k][1];int nearj = j + dir[k][0];if(neari < 0 || neari >=0 || nearj<0 || nearj >=m) continue;if(visitedGrid.count(grid[neari][nearj])) continue;count+= gridNum[grid[neari][nearj]];visitedGrid.insert(grid[neari][nearj]);}}result = max(result,count);}}cout<<result<<endl;
    }

http://www.xdnf.cn/news/790039.html

相关文章:

  • 海盗64位GameServer的使用体验
  • 【自动思考记忆系统】demo (Java版)
  • 记一次sql按经纬度计算距离
  • 市面上有真正的静态住宅ip吗?
  • android NDK 的 -> 是什么意思
  • LRC and VIP
  • mac环境下的python、pycharm和pip安装使用
  • C++核心编程_ 函数调用运算符重载
  • PPO: Proximal Policy Optimization Algorithms
  • 全面解析 Windows CE 定制流程:从内核到设备部署
  • 基于MATLAB的FTN调制和硬判决的实现
  • 手把手教你用Appsmith打造企业级低代码平台:从部署到性能调优实战
  • PPO和GRPO算法
  • 大模型的外围关键技术
  • 【面试】音视频面试
  • 亮数据网页解锁器:让数据触手探索亮数据解锁工具:打破网页数据采集的局限
  • GPIO的内部结构与功能解析
  • Spring Boot Actuator未授权访问漏洞修复
  • RS232/RS485 光电隔离转换器DAM-3210A
  • 学习STC51单片机26(芯片为STC89C52RCRC)
  • Python训练营打卡Day42
  • Java-IO流之字节输入流详解
  • Spring AOP 和 AspectJ 有什么区别
  • Unity ARPG战斗系统 _ RootMotion相关知识点
  • 如何构建自适应架构的镜像
  • Diffusion Models: A Comprehensive Survey of Methods and Applications
  • 网络攻防技术七:计算机木马
  • Java高级 | 【实验二】控制器类+相关注解知识
  • InternLM2/LM2.5/ViT/VL1.5/VL2.0笔记: 核心点解析
  • 服装产品属性描述数据集(19197条),AI智能体知识库收集~