问题描述:
解题思路:
记录每个格子的水量,再比较找最大水量。计算水量使用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