Le nombre d'îles statistiques fermées (DFS): Leetcode 1254

Le nombre d'îles fermées de statistiques


Description du problème:
Il y a une grille de matrice à deux dimensions, chaque emplacement soit la terre (symbole 0) est de l'eau (1 point).

Nous procédons d'une masse terrestre, chacun peut sous la direction de la zone adjacente d'environ quatre à aller, et sommes allés à toutes les terres, que nous appellerons une « île ».

Si une île complètement entourée par l'eau, qui est, toutes les zones terrestres adjacentes autour du bord des eaux sont de haut en bas, puis nous l'appellerons « fermé l'île. »

S'il vous plaît retourner le nombre d'îles fermées.

Exemple 1:

Entrée: grille = [[1,1,1,1,1,1,1,0], [1,0,0,0,0,1,1,0], [1,0,1,0, 1,1,1,0], [1,0,0,0,0,1,0,1], [1,1,1,1,1,1,1,0]]
sortie: 2
explication:
île île zone grise est fermée, car l'île est complètement entourée par l' eau ( à savoir, un espace clos).

Exemple 2:

Entrée: Grille = [[1,1,1,1,1,1,1],
[1,0,0,0,0,0,1],
[1,0,1,1,1,0, 1],
[1,0,1,0,1,0,1],
[1,0,1,1,1,0,1],
[1,0,0,0,0,0,1] ,
[1,1,1,1,1,1,1]]
sortie: 2

idées de résolution de problèmes:

  Tout d' abord, nous devons traverser toute l'île, si la position actuelle est 0 (terre), il faut déterminer si l'emplacement de l'île fermée l'île. DSF quatre directions vers le haut et vers le bas, si les quatre directions sont la terre, le retour vrai nombre total de +1. (Note: DSF lorsque le besoin de terres à succès marqué comme les eaux, de sorte que la prochaine fois pour éviter le double comptage lors de la traversée a)
  de ce titre n'a pas besoin de revenir en arrière, parce qu'il est à la recherche de la même région, n'a pas besoin de calculer le chemin.

graphique:

Du coin en haut à gauche pour la première fois entré dans DSF

(1) devient 1, et les quatre directions dfs

(2) Les premiers retours 0, 0 et la terre transformé en eaux 1.

(3) lorsque les eaux entrant entouré par la terre, retourne 1

Insérer ici l'image Description

Code est la suivante:

#include<iostream>
#include<vector>
using namespace std;
	int dfs(int i,int j,vector<vector<int> >& grid){
		if(i<0||j<0||i>=grid.size()||j>=grid[i].size()){//不满足条件 
			return 0;
		}
		if(grid[i][j]==1){//如果碰到水域返回1 
			return 1;
		}
		grid[i][j]=1;//如果碰到陆地则标记为水域 
		int x1= dfs(i+1,j,grid);
		int x2= dfs(i-1,j,grid);
		int y1= dfs(i,j+1,grid);
		int y2= dfs(i,j-1,grid);
		//四个方向全为水域返回1 
		if(x1&&x2&&y1&&y2){
			return 1;
		}
		return 0;
	}
	int closedIsland(vector<vector<int> >& grid) {
		int sum=0;
		for(int i=1;i<grid.size()-1;i++){//边缘部分肯定不是岛屿,所以从1开始 
			for(int j=1;j<grid[i].size()-1;j++){
				if(grid[i][j]==0){ //如果是陆地 
					if(dfs(i,j,grid)){
						sum++;
						}
					}
				}
		} 
			return sum;
    }
    
int main(){
	vector<vector<int> > grid={{0,0,1,1,0,1,0,0,1,0},{1,1,0,1,1,0,1,1,1,0},{1,0,1,1,1,0,0,1,1,0},{0,1,1,0,0,0,0,1,0,1},{0,0,0,0,0,0,1,1,1,0},{0,1,0,1,0,1,0,1,1,1},{1,0,1,0,1,1,0,0,0,1},{1,1,1,1,1,1,0,0,0,0},{1,1,1,0,0,1,0,1,0,1},{1,1,1,0,1,1,0,1,1,0}};
	cout<<closedIsland(grid);
	return 0;
}
	
Publié six articles originaux · a gagné les éloges 4 · Vues 7783

Je suppose que tu aimes

Origine blog.csdn.net/Milan_1in/article/details/104983603
conseillé
Classement