2815

#include<iostream>
using namespace std;
int m[55][55];
int visited[55][55] = {0};
int maxlen=0;
int totalen=0;
int maxroom=0;
int max(int a, int b)
{
    int t;
    if (a > b)
        t = a;
    else
        t = b;
    return t;
}
void  dfs(int x, int y)
{
    if (visited[x][y])
        return;
        visited[x][y] = maxroom;
        totalen++;
        if ((m[x][y] &1)==0)
            dfs(x,y-1);
        if ((m[x][y] &2)==0)
            dfs(x-1, y);
        if ((m[x][y] & 4)==0)
            dfs(x, y+1);
        if ((m[x][y] & 8)==0)
            dfs(x+1, y);
    }
int main()
{
    int x,y;
    cin >> x >> y;
    for (int i = 1; i <= x;i++)
    for (int j = 1; j <= y; j++)
    {
        cin >> m[i][j];
    }
    for (int i = 1; i <= x;i++)
    for (int j = 1; j <= y; j++)
    {
        if (!visited[i][j])
        {
            maxroom++;
            totalen = 0;
            dfs(i, j);
            maxlen = max(maxlen,totalen);
        
        }
    }
    cout << maxroom << endl;
    cout << maxlen << endl;
    return 0;

}

ps:这道题边的信息存在了二维数组m[55][55]里边,遍历整个图,寻找最大连通子图(maxroom)

猜你喜欢

转载自blog.csdn.net/luoshiyong123/article/details/80696904