方格连续置1面积最大值

来源:互联网 发布:吉他伴奏器软件 编辑:程序博客网 时间:2024/05/29 03:33

为了进行城市规划,需要计算居民区的住宅数目,该居民区的俯视图已经规划好,并分为n*m个网格,如果某个网格具有屋顶的一部分,则向其赋值1;如果是空地,则赋值0;由值为1的相邻网格单元组成的簇认定为一个单独住宅,对角放置的值为1的网格则不被认为是同一住宅或屋顶。

函数countHomes的输入包括一个二维数组grid及其维度n和m;其中n和m分别表示二维数组grid的行和列,该函数应该返回一个表示住宅数总数的整数,网格grid只包含0和1。

http://blog.csdn.net/charles1e/article/details/52530753?locationNum=2

下面这题是稍作修改的题:
将“住宅总数”改成了最大住宅面积。

解法如下:
(当时报了RuntimeError因为判断是否越界的问题…吸取教训)

#include <iostream>#include <vector>#include <string>#include <algorithm>#include <random>using namespace std;//递归函数:访问i, j位置的四周的点int dfs(vector<vector<int>>& matrix, int i, int j){    int res = 0;    if (i < 0 || i > matrix.size() - 1 || j < 0 || j > matrix[0].size() - 1)        return 0;    if (matrix[i][j] == 0)        return 0;    else    {        matrix[i][j] = 0;        if(i - 1 >= 0 && matrix[i-1][j] == 1)        {            res++;            res += dfs(matrix, i - 1, j);        }        if(i+1 < matrix.size() && matrix[i+1][j] == 1)        {            res++;            res += dfs(matrix, i + 1, j);        }        if(j - 1 >= 0 && matrix[i][j - 1] == 1)        {            res++;            res += dfs(matrix, i, j - 1);        }        if(j + 1 < matrix[0].size() && matrix[i][j+1] == 1)        {            res++;            res += dfs(matrix, i, j + 1);        }    }    return res;}//得到住宅总数int getNum(vector<vector<int>>& matrix){    int max_res = -1;    for (int i = 0; i < matrix.size(); ++i)    {        for (int j = 0; j <matrix[0].size(); ++j)        {            //为1才访问            int res = 0;            if (matrix[i][j] == 1)            {                res++;                res += dfs(matrix, i, j); //递归            }            if(res > max_res)                max_res = res;        }    }    return max_res;}int main(){    int m; int n;    //测试用    while (cin >> m, cin >> n)    {        vector<vector<int>> matrix;        matrix.resize(m, vector<int>(n, 0));        for (int i = 0; i < m; ++i)        {            for (int j = 0; j < n; ++j)            {                matrix[i][j] = rand()%2;            }        }        for (auto v : matrix)        {            for (auto i : v)                cout << i << " ";            cout << endl;        }        cout << getNum(matrix) << endl;    }}
0 0
原创粉丝点击