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

相关文章:

  • 如何判断机器是大端字节序还是小端字节序
  • 【高等数学】(2)函数
  • Python基于SVM技术的手写数字识别问题项目实战
  • MyBatis实战项目测试
  • 本人精通各种语言输出hello world
  • 机电工程常用设备
  • Asp.net core 使用EntityFrame Work
  • 振动力学:有阻尼单自由度系统(简谐力激励的受迫振动)
  • 从汇编的角度揭秘C++引用,豁然开朗
  • 【吾爱】逆向实战crackme160破解记录(三)
  • Generate Permutation
  • ALLEN BRADLEY特价型号1715-OB8DE 模块
  • Make All Equal
  • 灵活运用 NextJS 服务端组件与客户端组件
  • 远程终端登录和桌面访问(嵌入式开发)
  • 网络安全基础--第十天
  • 第十一章 注解
  • 【文献精读】Explaining grokking through circuit efficiency
  • 传输层协议:网络通信的关键纽带
  • Matlab自学笔记五十七:符号运算、可变精度运算、双精度浮点型运算,三种运算精度的概念、比较、选择和应用
  • 汕头网站快速排名提升/谷歌搜索引擎google
  • 优化seo网站/什么是网站推广策略
  • 贵阳市做网站电话/在线磁力搜索引擎
  • 衡阳做网站公司/今日百度小说排行榜风云榜
  • 制作团购网站/出售外链
  • 永久域名免费注册网站/深圳网络营销渠道