DFS深度优先搜索面试算法题
1.岛屿的个数
https://blog.csdn.net/qq_36136459/article/details/104326796
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。要求可以持续的工作
输入:
5 5
11110
11010
11000
00000
输出: 1
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define N 4 5 #define M 5 6 7 void DFS(int a[N][M],int i,int j) 8 { 9 a[i][j] = 0; 10 if(i-1>0 && a[i-1][j] == 1){ 11 DFS(a,i-1,j); 12 } 13 if(i+1<N-1 && a[i+1][j] == 1){ 14 DFS(a,i+1,j); 15 } 16 if(j-1>0 && a[i][j-1] == 1){ 17 DFS(a,i,j-1); 18 } 19 if(j+1 <M-1 && a[i][j+1] == 1){ 20 DFS(a,i,j+1); 21 } 22 } 23 24 int main() 25 { 26 int cout,i,j; 27 int a[N][M] = {{1,1,1,1,0},{1,1,0,1,0},{1,1,0,0,0},{0,0,0,0,0}}; 28 29 for(i = 0;i<N;i++) 30 { 31 for(j = 0;j<M;j++) 32 { 33 if(1 == a[i][j]) 34 { 35 DFS(a,i,j); 36 cout++; 37 } 38 } 39 } 40 printf("岛屿得到数量为%d\n",cout); 41 42 return 0; 43 }
浙公网安备 33010602011771号