题目描述
查看题目信息
给定一个m*n的矩形会场,每个1*1的方格位置上可站立一位参赛选手,用数字0到9表示。
其中,数字0表示该位置上没有参赛选手,数字1到9表示该位置上站有参赛选手。
同一参赛团队的定义:站有参赛队员的位置(即1到9中的某个数字的格子),若其上下左右(相邻的四个格子)还有参赛队员的话,则视其为同一团队。
你的任务:找出人数最多的参赛团队。
输入格式
一个M*n的矩阵。
输出格式
最大团队的人数。
样例输入
4 10 0234500067 1034560500 2045600671 0000000089
样例输出
11
问题提示
对于100%的数据,保证 1<= n,m<=100。
#include<bits/stdc++.h>
using namespace std;
int const N = 1010;
int m, n;
int a[N][N];
bool visited[N][N];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
void dfs(int x, int y)
{
for(int i = 0; i<4; i++)
{
int tx = x+dx[i];
int ty = y+dy[i];
if(tx<0|tx>m-1|ty<0|ty>n-1|visited[tx][ty]|a[tx][ty]!=a[x][y])
continue;
visited[tx][ty] = true;
dfs(tx,ty);
}
}
int main()
{
cin >> n>>m;
for(int i = 0; i<m; i++)
for(int j = 0; j<n; j++)
cin >> a[i][j];
int res = 0;
for(int i = 0; i<m; i++)
for(int j = 0; j<n; j++)
{
if(visited[i][j]==false)
{
dfs(i, j);
res++;
}
}
cout << res;
}