所有连通的不同的区域用不同的mark标记,即访问与否不用1和0来区别
代码如下
int dfs(int x, int y,int mark)
{
int sum = 1;
for (int k = 0; k < 4; k++)
{
int nx = x + dx[k];
int ny = y + dy[k];
if (nx >=0 && ny >= 0 && nx < n && ny < n&&a[nx][ny]!=a[x][y] && !vis[nx][ny])
{
vis[nx][ny] = mark;
sum+=dfs(nx, ny,mark);
}
}
return sum;
}
while(i<m)
{
int nx;
int ny;
scanf_s("%d%d", &nx, &ny);
if (!vis[nx-1][ny-1])
{
vis[nx-1][ny-1] = i+1;
result[i] = dfs(nx - 1, ny - 1,i+1);
i++;
}
else
{
result[i] = result[vis[nx-1][ny-1]-1];
i++;
}
}