当前位置: 首页 > 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.lqws.cn/news/105247.html

相关文章:

  • Android Kotlin 算法详解:链表相关
  • SpringBoot核心注解详解及3.0与2.0版本深度对比
  • java复习 02
  • 2.3 关于async/await的原理介绍
  • IBM DB2分布式数据库架构
  • Baklib内容中台AI重构智能服务
  • 秋招准备-数据结构
  • Java-IO流之字节输入流详解
  • MFC Resource.h 文件详解与修改指南
  • 网络安全-等级保护(等保)3-0 等级保护测评要求现行技术标准
  • 强制卸载openssl-libs导致系统异常的修复方法
  • C++仿RabbitMQ实现消息队列
  • WINUI——Magewell视频捕捉开发手记
  • RabbitMQ在SpringBoot中的应用
  • Easyui悬停组件
  • 机器学习——放回抽样
  • Vue3中Axios的使用-附完整代码
  • 12、企业应收账款(AR)全流程解析:从发票开具到回款完成
  • BugKu Web渗透之game1
  • 倚光科技:Zernike自由曲面转菲涅尔,反射镜及透镜加工技术革新
  • 鸿蒙5.0项目开发——横竖屏切换开发
  • 解锁电商新势能:商城系统自动 SaaS 多开功能深度解析
  • Redis中的fork操作
  • browser-use Agent 日志链路分析
  • Nginx + Tomcat 负载均衡、动静分离群集
  • CMS32M65xx/67xx系列CoreMark跑分测试
  • dvwa6——Insecure CAPTCHA
  • 【机器学习及深度学习】机器学习模型的误差:偏差、方差及噪声
  • 机器学习:集成学习概念、分类、随机森林
  • [P2P]并发模式