The Lakes BFS求解 连通块问题

题目描述

You are given an n×m grid a of non-negative integers. The value ai,j​ represents the depth of water at the i -th row and j -th column.

A lake is a set of cells such that:

  • each cell in the set has ai,j​>0 , and
  • there exists a path between any pair of cells in the lake by going up, down, left, or right a number of times and without stepping on a cell with ai,j​=0 .

The volume of a lake is the sum of depths of all the cells in the lake.

Find the largest volume of a lake in the grid.

输入格式

The first line contains a single integer t ( 1≤t≤104 ) — the number of test cases.

The first line of each test case contains two integers n,m ( ≤n,m≤1000 ) — the number of rows and columns of the grid, respectively.

Then n lines follow each with m integers ai,j​ ( 0≤ai,j​≤1000 ) — the depth of the water at each cell.

It is guaranteed that the sum of n⋅m over all test cases does not exceed 106106 .

输出格式

For each test case, output a single integer — the largest volume of a lake in the grid.

题意翻译

给定 n×m 的矩阵,正整数上、下、左、右相连构成一个连通块。定义一个连通块的权值为该连通块中所有数的和。求矩阵中最大的连通块。

Translated by @JYqwq

输入输出样例

输入 #1复制

5
3 3
1 2 0
3 4 0
0 0 5
1 1
0
3 3
0 1 1
1 0 1
1 1 1
5 5
1 1 1 1 1
1 0 0 0 1
1 0 5 0 1
1 0 0 0 1
1 1 1 1 1
5 5
1 1 1 1 1
1 0 0 0 1
1 1 4 0 1
1 0 0 0 1
1 1 1 1 1

输出 #1复制

10
0
7
16
21

思路:

其实就是bfs的模板题,只是在扩展时要判断你将要扩展的点是否为0,联通块问题,如果我们将要扩展的这个点为0的话,是不能扩展的,所以在判断条件上g[x][y]!=0

代码实现:

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=1005;
int n,m;
int jump[4][4]= {{1,0},{-1,0},{0,1},{0,-1}};  // 扩展方向 上、下、左、右
int g[N][N]; // 存储图
bool vis[N][N];
int ans;
int bfs(int x,int y)
{
    queue<PII>q;
    q.push({x,y});
    int res=g[x][y];
    while(!q.empty())
    {
        PII t=q.front();
        q.pop();
        int tx=t.first;
        int ty=t.second;
        for(int i=0; i<4; i++)
        {
            int X=tx+jump[i][0];
            int Y=ty+jump[i][1];
            if(!vis[X][Y] && X>=1 && X<=n && Y<=m  && Y>=1 && g[X][Y]!=0)
            {
                vis[X][Y]=true;
                q.push({X,Y});
                res+=g[X][Y];          //将所有联通的点的权值加起来
            }
        }
    }
    return res;

}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        ans=0;
        cin>>n>>m;
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                cin>>g[i][j];
            }
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                if(g[i][j]!=0)
                {
                    vis[i][j]=true;
                    int res=bfs(i,j); 
                    ans=max(ans,res); // 取所有连通块中的最大值
                }
            }
        }
        cout<<ans<<endl;
        memset(vis,false,sizeof(vis)); // 多组数据输入输出,记得将vis 数组标记取消
    }

    return 0;
}

Lakes Environmental Austal View 8.6是一款用于环境空气质量模拟和预测的软件工具。由Lakes Environmental开发,旨在支持环境管理和决策制定过程。 Austal View是一种流行的空气质量建模工具,可以模拟和预测大气传输和扩散。它可以模拟各种对环境有潜在影响的源(如工业和交通源)对空气质量的影响。通过使用Austal View 8.6,用户可以评估不同源的潜在影响,并制定相应的环境保护和改善策略。 ARTM 1.4.2是德国用于空气污染模拟的一种专门软件。它采用了德国技术辅助评估模型(TA Luft)的方法,并进行了改进。ARTM可以用于评估不同扰动源(如工厂和化学品储存)对周围环境的影响,以及在可接受的限制条件下进行污染物排放。 AERMOD 8.9是美国环境保护署(EPA)批准的一种大气扩散模型。它广泛用于评估工业和工厂源对环境的影响。AERMOD基于物理学和统计学原理,可以模拟和预测污染物在大气中的传输和扩散。该模型可用于评估大气污染对人体健康和生态系统的潜在影响,并帮助制定相关的空气质量管理政策。 综上所述,Lakes Environmental Austal View 8.6、ARTM 1.4.2和AERMOD 8.9是三种常用的环境空气质量模拟和评估工具,它们可以帮助评估和预测不同源的潜在环境影响,并支持决策制定过程。这些工具为环境管理提供了科学依据,有助于制定有效的环境保护措施和政策。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值