//2015-02
#include <iostream>
using namespace std;
const int N = 100;
bool g[N];
int e[N];
int n, m;
int t = 0;
int cnt = 0;
void dfs(int i, int v)
{
if (i < 1 || i>50)
return;
if (g[i])
return;
else
if (!g[i] && e[i] != v)
return;
else
{
g[i] = true;
}
if (!g[i + 1] && e[i + 1] == v)//可以换一个坐标转移数组
dfs(i + 1, v), g[i + 1] = true,t=1;
if (!g[i - 1] && e[i - 1] == v)
dfs(i - 1, v), g[i - 1] = true,t=1;
if (!g[i + m] && e[i + m] == v)
dfs(i + m, v), g[i + m] = true,t=1;
if (!g[i - m] && e[i - m] == v)
dfs(i - m, v), g[i - m] = true,t=1;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 1; j <= m; j++)
cin >> e[i * m + j];
}
memset(g, false, sizeof g);
for (int i = 1; i < n * m + 1; i++)
{
//cout << e[i] << ' ';
if (!g[i])
{
dfs(i, e[i]);
if(t) cnt++; //有点问题,如果遇到不连通的单独的点也会++
}
}
cout << cnt << endl;
return 0;
}
hdu 2015-02dfs
于 2023-03-18 18:13:34 首次发布