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

算法训练营|图论第二天 99.岛屿数量 100.岛屿的最大面积

题目:99.岛屿数量

题目链接:

99. 岛屿数量 (kamacoder.com)

代码:

深度优先搜索:

#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = { 0,1,1,0,-1,0,0,-1 };
void dfs(vector<vector<int>>& grid, vector<vector<bool>>& visited, int x, int y) {for (int i = 0; i < 4; i++) {int nextx = x + dir[i][0];int nexty = y + dir[i][1];if (nextx < 0 || nexty < 0 || nextx >= grid.size() || nexty >= grid[0].size()) continue;if (grid[nextx][nexty] == 1 && !visited[nextx][nexty]) {visited[nextx][nexty] = true;dfs(grid, visited, nextx, nexty);}}
}
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];}}int result = 0;vector<vector<bool>>visited(n, vector<bool>(m, false));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (grid[i][j] == 1 && visited[i][j] == false) {dfs(grid, visited, i, j);result++;}}}cout << result << endl;
}

广度优先搜索:

#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = { 0,1,1,0,-1,0,0,-1 };
void bfs(vector<vector<int>>& grid, vector<vector<bool>>& visited, int x, int y) {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 + dir[i][0];int nexty = cury + dir[i][1];if (nextx < 0 || nexty < 0 || nextx >= grid.size() || nexty >= grid[0].size()) continue;if (grid[nextx][nexty] && !visited[nextx][nexty]) {que.push({ nextx,nexty });visited[nextx][nexty] = true;bfs(grid, visited, nextx, nexty);}}}
}
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];}}int result = 0;vector<vector<bool>>visited(n, vector<bool>(m, false));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (grid[i][j] == 1 && !visited[i][j]) {result++;bfs(grid, visited, i, j);}}}cout << result << endl;
}

题目:100.岛屿的最大面积

题目链接:

100. 岛屿的最大面积 (kamacoder.com)

代码:

广搜:
 

#include<bits/stdc++.h>
using namespace std;
int ans;
int dir[4][2] = { 0,1,1,0,-1,0,0,-1 };
void bfs(vector<vector<int>>& grid, vector<vector<bool>>& visited, int x, int y) {queue<pair<int, int>>que;que.push({ x,y });ans++;visited[x][y] = true;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 || nexty < 0 || nextx >= grid.size() || nexty >= grid[0].size()) continue;if (grid[nextx][nexty] == 1 && !visited[nextx][nexty]) {visited[nextx][nexty] = true;que.push({ nextx,nexty });ans++;}}}
}
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];}}int result = 0;vector<vector<bool>>visited(n, vector<bool>(m, false));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (!visited[i][j] && grid[i][j]) {ans = 0;bfs(grid, visited, i, j);result = max(result, ans);}}}cout << result << endl;
}

 深搜:

#include<bits/stdc++.h>
using namespace std;
int ans;
int dir[4][2] = { 0,1,1,0,-1,0,0,-1 };
void dfs(vector<vector<int>>& grid, vector<vector<bool>>& visited, int x, int y) {if (grid[x][y] == 0 || visited[x][y]) return;visited[x][y] = true;ans++;for (int i = 0; i < 4; i++) {int nextx = x + dir[i][0];int nexty = y + dir[i][1];if (nextx < 0 || nexty < 0 || nextx >= grid.size() || nexty >= grid[0].size()) continue;dfs(grid, visited, nextx, nexty);}
}
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];}}int result = 0;vector<vector<bool>>visited(n, vector<bool>(m, false));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (!visited[i][j] && grid[i][j]) {ans = 0;dfs(grid, visited, i, j);result = max(result, ans);}}}cout << result << endl;
}

 深搜思路2:

#include<bits/stdc++.h>
using namespace std;
int ans;
int dir[4][2] = { 0,1,1,0,-1,0,0,-1 };
void dfs(vector<vector<int>>& grid, vector<vector<bool>>& visited, int x, int y) {for (int i = 0; i < 4; i++) {int nextx = x + dir[i][0];int nexty = y + dir[i][1];if (nextx < 0 || nexty < 0 || nextx >= grid.size() || nexty >= grid[0].size()) continue;if (!visited[nextx][nexty] && grid[nextx][nexty]) {visited[nextx][nexty] = true;ans++;dfs(grid, visited, nextx, nexty);}}
}
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];}}int result = 0;vector<vector<bool>>visited(n, vector<bool>(m, false));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (!visited[i][j] && grid[i][j]) {ans = 0;dfs(grid, visited, i, j);result = max(result, ans);}}}cout << result << endl;
}


http://www.mrgr.cn/news/12201.html

相关文章:

  • 【北森-注册安全分析报告-无验证方式导致安全隐患】
  • 列式存储数据库(Columnar Database)
  • 趣味算法------试用 6 和 9 组成的最大数字
  • streamlit+wordcloud使用pyinstaller打包遇到的一些坑
  • SpringBootWeb入门-HTTP协议、Tomcat下载、基本使用、入门程序解析
  • 每天一个数据分析题(四百九十九)- 数据集
  • EmguCV学习笔记 VB.Net 6.S 特别示例
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • JVM知识点记录
  • jQuery 事件
  • 【UE5】库存系统——01
  • MySQL集群技术4——MySQL路由
  • 什么是令牌桶算法?工作原理是什么?使用它有哪些优点和注意事项?
  • 探索Objective-C中的富文本世界:NSAttributedString与NSMutableAttributedString
  • 这几天旅游去了,刚回来,有几点感想
  • Java框架myBatis(三)
  • Hadoop: Mapreduce了解
  • ZooKeeper可视化工具
  • 如何在项目中配置.gitignore文件
  • SpringBoot集成kafka-生产者发送消息