poj 2386 DFS

DFS 水题

 1 #include <iostream>
2 #include <stdio.h>
3 #include <string.h>
4 using namespace std;
5
6 const int maxx=100;
7 int n,m,cnt,dir[8][2]={{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1}};
8 char pool[maxx+2][maxx+2];
9 bool visit[maxx+2][maxx+2];
10
11 bool judge(int a,int b)
12 {
13 if(a>=1 && a<=n && b>=1 && b<=m && pool[a][b]=='W')
14 return 1;
15 return 0;
16 }
17 void dfsvisit(int x,int y)
18 {
19 int i,a,b;
20 for(i=0;i<=7;i++)
21 {
22 a=x+dir[i][0];
23 b=y+dir[i][1];
24 if(judge(a,b) && !visit[a][b])
25 {
26 visit[a][b]=1;
27 dfsvisit(a,b);
28 }
29 }
30 }
31
32 void dfs()
33 {
34 int i,j;
35 for(i=1;i<=n;i++)
36 for(j=1;j<=m;j++)
37 {
38 if(!visit[i][j] && pool[i][j]=='W')
39 {
40 visit[i][j]=1;
41 dfsvisit(i,j);
42 cnt++;
43 }
44 }
45 }
46
47 int main()
48 {
49 int i,j;
50 freopen("in.txt","r",stdin);
51 while(scanf("%d%d",&n,&m)!=EOF)
52 {
53 memset(visit,0,sizeof(visit));
54 for(i=1;i<=n;i++)
55 for(j=1;j<=m;j++)
56 cin>>pool[i][j];
57 cnt=0;
58 dfs();
59 printf("%d\n",cnt);
60 }
61 return 0;
62 }



原文地址:https://www.cnblogs.com/inpeace7/p/2422748.html