POJ 1562 && ZOJ 1709 Oil Deposits(简单DFS)

题目链接

题意 : 问一个m×n的矩形中,有多少个pocket,如果两块油田相连(上下左右或者对角连着也算),就算一个pocket 。

思路 : 写好8个方向搜就可以了,每次找的时候可以先把那个点直接变为*,这样可以避免重复搜索。

 1 //POJ 1562 ZOJ 1709
 2 
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <iostream>
 6 #include <stack>
 7 #include <algorithm>
 8 
 9 using namespace std ;
10 
11 char ch[110][110] ;
12 int dir[8][2] = {{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}} ;
13 int sum ;
14 int m,n ;
15 
16 void DFS(int x,int y)
17 {
18     ch[x][y] = '*' ;
19     for(int i = 0 ; i < 8 ; i++)
20     {
21         int xx = x + dir[i][0] ;
22         int yy = y + dir[i][1] ;
23         if(xx >= 0 && xx <= m && yy >= 0 && yy <= n && ch[xx][yy] == '@')
24         {
25             DFS(xx,yy) ;
26         }
27     }
28 }
29 int main()
30 {
31 
32     while(~scanf("%d %d",&m,&n))
33     {
34         if(m == 0) break ;
35         for(int i = 0 ; i < m ; i++)
36             scanf("%s",ch[i]) ;
37         sum = 0 ;
38         for(int i = 0 ; i < m ; i++)
39             for(int j = 0 ; j < n ; j++)
40             {
41                 if(ch[i][j] == '@')
42                 {
43                     DFS(i,j) ;
44                     sum++ ;
45                 }
46             }
47         printf("%d\n",sum) ;
48     }
49     return 0 ;
50 }
View Code

 

转载于:https://www.cnblogs.com/luyingfeng/p/3671757.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值