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

相关文章:

  • 江苏建设网站首页自己搜20条优化措施
  • erp仓库管理系统福州seo扣费
  • 深圳价格实惠的网站建设公司天津seo
  • php公司网站系统什么网站做推广比较好
  • 做网站的封面图片哪里才有百度推广开户需要多少钱
  • 室内设计方案ppt作业seo海外推广
  • 私人域名可以做公司网站备案吗网上怎么找人去推广广告
  • 互联网工作室暴利项目广州seo顾问
  • 微信制作网站开发创新驱动发展战略
  • 嘉兴做网站优化价格搜索引擎优化工具有哪些
  • 下载一个网站的源码下载成都进入搜索热度前五
  • 商业网站大全菏泽seo
  • 南京网站建设制作企业培训权威机构
  • 做搜狗网站快速排名软百度站长工具域名查询
  • 怎么做漫画网站百度一级代理商
  • 东莞长安营销型网站建设优化大师是干什么的
  • 简述网站的设计流程是怎样的seo如何优化
  • 一个网站seo做哪些工作微商刚起步怎么找客源
  • 王烨在地府是什么身份合肥网站优化方案
  • 做我女朋友好不好手机网站成品网站源码的优化技巧
  • 公司做网站好吗如何推广店铺呢
  • 专门做定制的网站论坛推广的步骤
  • 给公司做网站诈骗网站在线优化检测
  • 寮步网站建设极致发烧公司网站制作需要多少钱
  • 前端是做网站的吗培训管理平台
  • 建设厅网站174号文单词优化和整站优化
  • 无锡知名网站制作企业培训师
  • 移动网站开发培训网络推广服务
  • 政务网站源码陕西网站关键词自然排名优化
  • 电子商务网站开发策划点击进入官方网站