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 }

 

posted @ 2022-07-27 01:25  学习&笔记  阅读(56)  评论(0)    收藏  举报