titre
Avez - vous une mer Zhang N × N « » Photos de pixels N × N, représente l'océan, « # » représente la terre, comme suit.:
.......
.##....
.##....
....##.
..####.
...###. .......
Le « haut en bas » sur les quatre directions ensemble un morceau de terrain composé d'une île, par exemple, la figure avait 2 deux îles.
En raison de la montée des eaux causée par le réchauffement climatique, les scientifiques prédisent les prochaines décennies, les îles bordent une plage de pixels sera submergée.
Plus précisément, (quatre pixels adjacents dans la marine verticale et horizontale) Si un pixel et de l'océan de la terre adjacente, il sera immergé.
Par exemple, dans la figure ci-dessus la mer deviendra l'avenir se présente comme suit:
.......
.......
.......
.......
....#..
.......
.......
travail s'il vous plaît: Selon les scientifiques prédisent, le nombre de photos dans les îles sera complètement submergée.
Format d'entrée
La première ligne contient un nombre entier N.
Les suivantes N N lignes N colonne N contenant un caractère de la « # » et « » Composé de N x N représente la matrice de caractère N × N, ce qui représente une image de la mer, « # » terre « » représente l'océan.
Photos veiller à ce que la première une rangée 1, 1 1, le premier N e N, N N colonnes de pixels sont des océans.
Format de sortie
Un entier qui représente la réponse.
Plage de données
1 ≤ N ≤ 1000 1≤N≤1000
Entrée Echantillon 1:
7
.......
.##....
.##....
....##.
..####.
...###. .......
Exemple de sortie 1:
1
Entrée échantillon 2:
9
.........
.##.##...
.#####...
.##.##...
.........
.##.#....
.#.###... .#..#.... .........
Exemple 2 de sortie:
思路
- Pour connaître l'île où, vous devez d'abord connaître la carte de pixels qui communique avec des îles BFS traversal
- Déterminer si un pixel est une île frontalière, pour voir s'il est « · » Il est en bas sur les quatre éléments
Nécessité de faire attention au point
- En traversant la nécessité de l'île afin de déterminer: 1) si le point a été hors limites 2) si le point a été visité 3) Le point est le « # » ou « * »
- direction de commande, créant dx [] = {} -1,0,1,0, dy [] = {0, 1, 0, -1} deux rangées, quatre fois avec une boucle, la partie supérieure gauche pour abaisser virage à droite commande.
code
#include <iostream> #include <file> #define MAXN 1001 en utilisant l' espace de noms std; int n; carbonisation img [MAXN] [MAXN]; bool vis [MAXN] [MAXN]; int dx [] = {- 1 , 0 , 1 , 0 }, dy [] = { 0 , 1 , 0 , - 1 }; / * 7 ....... . ## .... . ## .... .... ##. .. ####. ... ###. ....... * / vides bfs ( int i, int j, int & somme, int & lié) { vis [i] [j] = true ; file d' attente <paire < int , int >> q; paire < int , int > p (i, j); q.push (p); tandis que (! {q.empty ()) l auto = q.front (); q.pop (); additionner ++ ; bool is_bound = false ; pour ( int k = 0; k < 4 ; k ++ ) { int x = l.first + dx [k], y = l.second + dy [k]; si (x> n || y> n || x < 0 || y < 0 || vis [x] [y] == vrai ) continuer ; d' autre si (img [x] [y] == ' # ' ) { vis [x] [y] = vrai ; p = make_pair (x, y); q.push (p); } Autre si (img [x] [y] == ' ' ) { is_bound = true ; } } Si (is_bound == true ) lié ++ ; } } Int main () { cin >> n; pour ( int i = 0 ; i <n; i ++ ) { pour ( int j = 0 ; j <n; j ++ ) { cin >> img [i] [j]; } } Int count = 0 ; pour ( int i =0 ; i <n; i ++ ) { pour ( int j = 0 ; j <n; j ++ ) { si (img [i] [j] == ' # ' && vis [i] [j] == false ) { int somme = 0 , lié = 0 ; bfs (i, j, somme, liée); si (somme == lié) compte ++ ; } } } Cout << compter; retourner 0 ; }