Enlace de tema:
http://acm.nyist.net/JudgeOnline/problem.php?pid=27
Numero de piscinas
Límite de tiempo:
3000
ms | Límite de memoria:
65535
KB
Dificultad:
4
-
descripción
-
Hay algunos ríos pequeños y algunos lagos en el campus del Instituto de Tecnología de Nanyang. Ahora, los tomamos como piscinas. Supongamos que hay un mapa de alguna parte de nuestra escuela. Este mapa solo indica si es una piscina o no. Ahora , tu La tarea está por llegar. Usa la computadora para averiguar cuántos grupos hay en el mapa.
-
ingresar
-
Una primera línea del entero de entrada N, el total de N conjuntos de datos de prueba
para cada conjunto de datos son los primeros en ingresar el número de filas del mapa m (0 <m <100) y el número de columna n (0 <n <100) , luego ingrese Ingrese n números en cada línea de las siguientes m líneas, indicando si hay agua o no hay agua (1 significa que esto es una piscina, 0 significa que este es el suelo)
Producción
-
Muestra el número de piscinas en el mapa.
Cabe señalar que si los lados de cada grupo (cuatro posiciones arriba, abajo, izquierda y derecha) siguen siendo grupos, se pueden considerar como el mismo grupo.
Entrada de muestra
-
2 3 4 1 0 0 0 0 0 1 1 1 1 1 0 5 5 1 1 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1
Salida de muestra
-
2 3
//典型的求连通块,DFS #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int s[105][105]; int vis[105][105]; int di[][2] = { {1,0},{-1,0},{0,1},{0,-1}}; int m, n; int valid(int x, int y) { if(x<0||x>=m||y<0||y>=n) return 0; return 1; } void dfs(int x, int y) { vis[x][y] = 1; for(int i=0; i<4; i++) { int xx = x+di[i][0]; int yy = y+di[i][1]; if(s[xx][yy]==1&&valid(xx, yy)&&!vis[xx][yy]) { dfs(xx, yy); } } } int main() { int N; scanf("%d", &N); while(N--) { memset(vis, 0, sizeof(vis)); scanf("%d%d", &m, &n); for(int i=0; i<m; i++) for(int j=0; j<n; j++) scanf("%d", &s[i][j]); int ans = 0; for(int i=0; i<m; i++) for(int j=0; j<n; j++) if(!vis[i][j]&&s[i][j]==1) { dfs(i, j); ans++; } printf("%d\n", ans); } return 0; }
-
Una primera línea del entero de entrada N, el total de N conjuntos de datos de prueba