本文主要是介绍题目:小怂爱水洼(蓝桥OJ 4234),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述:
解题思路:
记录每个格子的水量,再比较找最大水量。计算水量使用dfs。
注意点:属于同一个水洼的每个格子,只需要计算一次dfs就好了,因为每个格子的dfs都相同 。
代码:
#include <bits/stdc++.h>
using namespace std;using ll = long long;
const int N = 1e2 + 9;
int a[N][N], vis[N][N];
ll ans = 0, res = 0;
int n, m;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};void dfs(int x, int y, ll & res) // res:一个水洼的最大水量,传值:改变传入的变量本身**
{res += a[x][y]; // vis[x][y] = 1; // 一定要标记,不标记会一直循环for(int i = 0; i <=3; i++){int nx = x + dx[i], ny = y + dy[i];if(nx > n || ny > m || nx < 1 || ny < 1 || a[nx][ny] == 0 || vis[nx][ny] )continue;dfs(nx, ny, res);}
}int main()
{cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> a[i][j];for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){if(a[i][j] != 0 && vis[i][j] == 0){ //res = 0; // 每一次都要重新刷新 dfs(i, j, res);ans = max(ans, res); }}}cout << ans << '\n';return 0;
}
知识点:dfs
这篇关于题目:小怂爱水洼(蓝桥OJ 4234)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!