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

公司如何建站网站转换移动网站

公司如何建站,网站转换移动网站,毕节市生态文明建设网站,wordpress超链接工信部刷题记录 101. 孤岛的总面积DFSBFS 102. 沉没孤岛DFSBFS *103. 水流问题*104. 建造最大岛屿 101. 孤岛的总面积 题目地址 本题要求不与矩阵边缘相连的孤岛的总面积。先将与四个边缘相连的岛屿变为海洋,再统计剩余的孤岛的总面积。无需再标识访问过的结点&#xff…

刷题记录

  • 101. 孤岛的总面积
    • DFS
    • BFS
  • 102. 沉没孤岛
    • DFS
    • BFS
  • *103. 水流问题
  • *104. 建造最大岛屿

101. 孤岛的总面积

题目地址

本题要求不与矩阵边缘相连的孤岛的总面积。先将与四个边缘相连的岛屿变为海洋,再统计剩余的孤岛的总面积。无需再标识访问过的结点,因为访问过后都变为海洋了。

时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( n 2 ) O(n^2) O(n2)

DFS

// c++
#include<bits/stdc++.h>
using namespace std;
int direction[4][2] = {0, 1, 0, -1, -1, 0, 1, 0};
int result = 0;void pre_dfs(vector<vector<int>> &matrix, int x, int  y){matrix[x][y] = 0;result++;for(int i=0; i<4; i++){int nextx = x + direction[i][0];int nexty = y + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix[0].size() || nextx<0 || nexty<0) continue;if(matrix[nextx][nexty]){matrix[nextx][nexty] = 0;pre_dfs(matrix, nextx, nexty);}}
}int main(){int n,m;cin>>n>>m;vector<vector<int>> matrix(n, vector<int>(m, 0));for(int i=0; i<n; i++){for(int j=0; j<m; j++){cin>>matrix[i][j];}}for(int i=0; i<n; i++) {if(matrix[i][0]){pre_dfs(matrix, i, 0);}if(matrix[i][m-1]){pre_dfs(matrix, i, m-1);}}for(int j=0; j<m; j++){if(matrix[0][j]){pre_dfs(matrix, 0, j);}if(matrix[n-1][j]){pre_dfs(matrix, n-1, j);   }}result = 0;for(int i=0; i<n; i++){for(int j=0; j<m; j++){if(matrix[i][j]){pre_dfs(matrix, i, j);   }}}cout<<result;return 0;
}

BFS

// c++
#include<bits/stdc++.h>
using namespace std;
int direction[4][2] = {0, 1, 0, -1, -1, 0, 1, 0};
int result = 0;void pre_dfs(vector<vector<int>> &matrix, int x, int  y){matrix[x][y] = 0;result++;for(int i=0; i<4; i++){int nextx = x + direction[i][0];int nexty = y + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix[0].size() || nextx<0 || nexty<0) continue;if(matrix[nextx][nexty]){matrix[nextx][nexty] = 0;pre_dfs(matrix, nextx, nexty);}}
}void pre_bfs(vector<vector<int>> &matrix, int x, int  y){queue<pair<int, int>> que;que.push({x, y});matrix[x][y] = 0;result++;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 + direction[i][0];int nexty = cury + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix[0].size() || nextx<0 || nexty<0) continue;if(matrix[nextx][nexty]){matrix[nextx][nexty] = 0;result++;que.push({nextx, nexty});}}}
}int main(){int n,m;cin>>n>>m;vector<vector<int>> matrix(n, vector<int>(m, 0));for(int i=0; i<n; i++){for(int j=0; j<m; j++){cin>>matrix[i][j];}}/*// dfsfor(int i=0; i<n; i++) {if(matrix[i][0]){pre_dfs(matrix, i, 0);}if(matrix[i][m-1]){pre_dfs(matrix, i, m-1);}}for(int j=0; j<m; j++){if(matrix[0][j]){pre_dfs(matrix, 0, j);}if(matrix[n-1][j]){pre_dfs(matrix, n-1, j);   }}*/// bfsfor(int i=0; i<n; i++) {if(matrix[i][0]){pre_bfs(matrix, i, 0);}if(matrix[i][m-1]){pre_bfs(matrix, i, m-1);}}for(int j=0; j<m; j++){if(matrix[0][j]){pre_bfs(matrix, 0, j);}if(matrix[n-1][j]){pre_bfs(matrix, n-1, j);   }}result = 0;for(int i=0; i<n; i++){for(int j=0; j<m; j++){if(matrix[i][j]){// pre_dfs(matrix, i, j);   pre_bfs(matrix, i, j);}}}cout<<result;return 0;
}

102. 沉没孤岛

题目地址

本题是上一题的反向操作

先把非孤岛做访问标记,再对剩余陆地进行操作。

时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( n 2 ) O(n^2) O(n2)

DFS

// c++
#include<bits/stdc++.h>
using namespace std;
int direction[][2] = {0, 1, 0, -1, -1, 0, 1, 0};
void pre_dfs(const vector<vector<int>>& matrix,vector<vector<bool>>& visited,int x, int y){visited[x][y] = true;for(int i=0; i<4; i++){int nextx = x + direction[i][0];int nexty = y + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix.size() ||nextx<0 || nexty<0) continue;if(matrix[nextx][nexty] && !visited[nextx][nexty]){// visited[nextx][nexty] = true;pre_dfs(matrix, visited, nextx, nexty);}}
}void dfs(vector<vector<int>>& matrix,vector<vector<bool>>& visited,int x, int y){matrix[x][y] = 0;for(int i=0; i<4; i++){int nextx = x + direction[i][0];int nexty = y + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix.size() ||nextx<0 || nexty<0) continue;if(matrix[nextx][nexty] && !visited[nextx][nexty]){visited[nextx][nexty] = true;dfs(matrix, visited, nextx, nexty);}}
}
int main(){int n,m;cin>>n>>m;vector<vector<int>> matrix(n, vector<int>(m, 0));vector<vector<bool>> visited(n, vector<bool>(m, false));for(int i=0; i<n; i++){for(int j=0; j<m; j++){cin>>matrix[i][j];}}for(int i=0; i<n; i++){if(matrix[i][0] && !visited[i][0]) pre_dfs(matrix, visited, i, 0);if(matrix[i][m-1] && !visited[i][m-1]) pre_dfs(matrix, visited, i, m-1);}for(int j=0; j<m; j++){if(matrix[0][j] && !visited[0][j]) pre_dfs(matrix, visited, 0, j);if(matrix[n-1][j] && !visited[n-1][j]) pre_dfs(matrix, visited, n-1, j);}for(int i=0; i<n; i++){for(int j=0; j<m; j++){if(matrix[i][j] && !visited[i][j]){visited[i][j] = true;dfs(matrix,visited, i, j);}}for(int j=0; j<m; j++) cout<<matrix[i][j]<<" ";cout<<endl;}return 0;
}

BFS

//c++
#include<bits/stdc++.h>
using namespace std;
int direction[][2] = {0, 1, 0, -1, -1, 0, 1, 0};
void pre_dfs(const vector<vector<int>>& matrix,vector<vector<bool>>& visited,int x, int y){visited[x][y] = true;for(int i=0; i<4; i++){int nextx = x + direction[i][0];int nexty = y + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix.size() ||nextx<0 || nexty<0) continue;if(matrix[nextx][nexty] && !visited[nextx][nexty]){// visited[nextx][nexty] = true;pre_dfs(matrix, visited, nextx, nexty);}}
}void dfs(vector<vector<int>>& matrix,vector<vector<bool>>& visited,int x, int y){matrix[x][y] = 0;for(int i=0; i<4; i++){int nextx = x + direction[i][0];int nexty = y + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix.size() ||nextx<0 || nexty<0) continue;if(matrix[nextx][nexty] && !visited[nextx][nexty]){visited[nextx][nexty] = true;dfs(matrix, visited, nextx, nexty);}}
}void pre_bfs(const vector<vector<int>>& matrix,vector<vector<bool>>& visited,int x, int y){visited[x][y] = true;queue<pair<int, int>> que;que.push({x,y});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 + direction[i][0];int nexty = cury + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix.size() ||nextx<0 || nexty<0) continue;if(matrix[nextx][nexty] && !visited[nextx][nexty]){visited[nextx][nexty] = true;que.push({nextx, nexty});}}}
}void bfs(vector<vector<int>>& matrix,vector<vector<bool>>& visited,int x, int y){visited[x][y] = true;matrix[x][y] = 0;queue<pair<int, int>> que;que.push({x,y});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 + direction[i][0];int nexty = cury + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix.size() ||nextx<0 || nexty<0) continue;if(matrix[nextx][nexty] && !visited[nextx][nexty]){visited[nextx][nexty] = true;matrix[nextx][nexty] = 0;que.push({nextx, nexty});}}}
}
int main(){int n,m;cin>>n>>m;vector<vector<int>> matrix(n, vector<int>(m, 0));vector<vector<bool>> visited(n, vector<bool>(m, false));for(int i=0; i<n; i++){for(int j=0; j<m; j++){cin>>matrix[i][j];}}/*// dfsfor(int i=0; i<n; i++){if(matrix[i][0] && !visited[i][0]) pre_dfs(matrix, visited, i, 0);if(matrix[i][m-1] && !visited[i][m-1]) pre_dfs(matrix, visited, i, m-1);}for(int j=0; j<m; j++){if(matrix[0][j] && !visited[0][j]) pre_dfs(matrix, visited, 0, j);if(matrix[n-1][j] && !visited[n-1][j]) pre_dfs(matrix, visited, n-1, j);}*/// bfsfor(int i=0; i<n; i++){if(matrix[i][0] && !visited[i][0]) pre_bfs(matrix, visited, i, 0);if(matrix[i][m-1] && !visited[i][m-1]) pre_bfs(matrix, visited, i, m-1);}for(int j=0; j<m; j++){if(matrix[0][j] && !visited[0][j]) pre_bfs(matrix, visited, 0, j);if(matrix[n-1][j] && !visited[n-1][j]) pre_bfs(matrix, visited, n-1, j);}for(int i=0; i<n; i++){for(int j=0; j<m; j++){if(matrix[i][j] && !visited[i][j]){// visited[i][j] = true;// dfs(matrix,visited, i, j);bfs(matrix,visited, i, j);}}for(int j=0; j<m; j++) cout<<matrix[i][j]<<" ";cout<<endl;}return 0;
}

*103. 水流问题

题目地址

使用两个标识访问的数组分别从两组边界出发进行dfs遍历,使用从低向高流(反向流)来分别记录两组边界的结点。最后两组边界的交集就是本题答案。
思路

时间复杂度: O ( m ∗ n ) O(m*n) O(mn)
空间复杂度: O ( m ∗ n ) O(m*n) O(mn)

// c++
#include<bits/stdc++.h>
using namespace std;
int direction[][2] = {0, 1, 0, -1, -1, 0, 1, 0};
void dfs(const vector<vector<int>> &matrix, vector<vector<bool>> &visited,int x, int y){visited[x][y] = true;for(int i=0; i<4; i++){int nextx = x + direction[i][0];int nexty = y + direction[i][1];if(nextx>=matrix.size() || nexty>=matrix[0].size() || nextx<0 || nexty<0) continue;if(matrix[x][y]>matrix[nextx][nexty]) continue;if(!visited[nextx][nexty]) dfs(matrix, visited, nextx, nexty);}
}int main(){int n,m;cin>>n>>m;vector<vector<int>> matrix(n, vector<int>(m, 0));vector<vector<bool>> first(n, vector<bool>(m, false));vector<vector<bool>> second(n, vector<bool>(m, false));for(int i=0; i<n; i++){for(int j=0; j<m; j++){cin>>matrix[i][j];}}for(int i=0; i<n; i++){dfs(matrix, first, i, 0);dfs(matrix, second, i, m-1);}for(int j=0; j<m; j++){dfs(matrix, first, 0, j);dfs(matrix, second, n-1, j);}for(int i=0; i<n; i++){for(int j=0; j<m; j++){if(first[i][j] && second[i][j]) cout<<i<<" "<<j<<endl;}}return 0;   
}

*104. 建造最大岛屿

题目地址

题解思路

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// c++
http://www.yayakq.cn/news/861651/

相关文章:

  • 合肥道路建设从哪个网站可以看到安 网站建设
  • 外贸做网站推广镇江久一信息科技
  • 视频网站为什么有人做如何做海外淘宝网站
  • 24手表网站网页设计精选网站
  • 做一个棋牌网站要多少钱东莞做网络推广的公司
  • 南通营销型网站新网网站制作
  • 淘宝客做网站好还是建群号网络营销和网络销售的关系
  • 微网站建设比较全面的是广州网站建设设计公司信息
  • 做外贸网站流程图深圳网站建设哪个公司号
  • 商业空间设计网站大全最近的国际新闻
  • 大型网站建设教程普斯泰网站建设
  • 南昌做网站的公司多不多企业网站 手机站
  • 手机网站开发方式打广告去哪个平台
  • 苏州网站建设提供商沈阳外贸网站制作公司
  • 猎头建设网站中国建筑考试网官网首页
  • 做网站建设给人销售企业品牌推广价格
  • 服务器可以做几个网站吗中国石油网站建设在线第三次作业
  • 全网最稳最低价自助下单网站注册上海公司
  • 苏州公司网站建设报价常州低价网站建设公司
  • 淄博网站优化服务南宁信息建设网站
  • 好用的土木建筑网站建设网站必须要钱吗
  • 荆州网站建设费用自己建网站要学什么
  • 网站群管理系统哪个好免费高清图片素材网站有哪些
  • 网站如何做注册类 cpa站酷网vi设计
  • 北京网站设计合理刻正版android应用开发教程
  • 网站建设全包广州信息推广
  • 珠海网站建设在哪里三大电商平台
  • 分销网站建设化妆品行业网站建设方案
  • 桐乡 网站建设大连网站建设ewaylife
  • 东营专业网站建设如何模板wordpress