首页 > 其他 > 详细

咸鱼的ACM之路:DFS做题记录

时间:2020-02-02 19:51:20      阅读:64      评论:0      收藏:0      [点我收藏+]

DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止。

洛谷 P1596 [USACO10OCT] 湖计数Lake Counting

DFS入门题,求连通块的。

技术分享图片
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int dx[8]={-1,-1,-1, 0, 0, 1,1,1};//方向
 5 int dy[8]={-1, 0, 1,-1, 1,-1,0,1};
 6 char mapp[110][110];//地图
 7 int n,m;
 8 
 9 void dfs (int x,int y)
10 {
11     int nx,ny;
12     mapp[x][y]=.;//每进入一个状态就把这个点去掉,避免重复进入DFS
13     for (int i=0;i<8;i++)
14     {
15         nx=x+dx[i];
16         ny=y+dy[i];
17         if (nx<0||nx>=n||ny<0||ny>=m)
18             continue;
19         if (mapp[nx][ny]==W)//如果‘.’也能走的话,那整块图都可以走了...
20             dfs(nx,ny);//进入到下一个状态
21     }
22     return ;
23 }
24 
25 int main()
26 {
27     scanf("%d %d",&n,&m);
28     int fin=0;
29     for (int i=0;i<n;i++)
30         scanf("%s",mapp[i]);//这样读一行
31     for (int i=0;i<n;i++)
32     {
33         for (int j=0;j<m;j++)
34         {
35             if (mapp[i][j]==W)
36             {
37                 dfs(i,j);//每次DFS一遍后,整块湖泊就算填平了
38                 fin++;
39             }
40         }
41     }
42     printf("%d\n",fin);
43     return 0;
44 }
View Code

 

咸鱼的ACM之路:DFS做题记录

原文:https://www.cnblogs.com/Salty-Fish/p/12253270.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!