DFS PKU 1562

简介:

简单地DFS

Oil Deposits
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 12801   Accepted: 6998

Description

The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides the land into numerous square plots. It then analyzes each plot separately, using sensing equipment to determine whether or not the plot contains oil. A plot containing oil is called a pocket. If two pockets are adjacent, then they are part of the same oil deposit. Oil deposits can be quite large and may contain numerous pockets. Your job is to determine how many different oil deposits are contained in a grid.

Input

The input contains one or more grids. Each grid begins with a line containing m and n, the number of rows and columns in the grid, separated by a single space. If m = 0 it signals the end of the input; otherwise 1 <= m <= 100 and 1 <= n <= 100. Following this are m lines of n characters each (not counting the end-of-line characters). Each character corresponds to one plot, and is either `*', representing the absence of oil, or `@', representing an oil pocket. 

Output

are adjacent horizontally, vertically, or diagonally. An oil deposit will not contain more than 100 pockets.

Sample Input

1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5 
****@
*@@*@
*@**@
@@@*@
@@**@
0 0

Sample Output

0
1
2
2
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <limits.h>
#include <ctype.h>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>
#include <deque>
#include <vector>
#include <set>
//#include <map>
using namespace std;
#define MAXN 100 + 10
char map[MAXN][MAXN];
int vis[MAXN][MAXN];
int m,n;
//int count;
int xx[8] = {-1,-1,0,1,1,1,0,-1};
int yy[8] = {0,1,1,1,0,-1,-1,-1};

void DFS(int x,int y){
    int i;
    for(i=0;i<8;i++){
        int dx = x+xx[i];
        int dy = y+yy[i];
        if(dx>=0 && dx<m && dy>=0 && dy<n){
            if(map[dx][dy]=='@' && vis[dx][dy]==0){
                vis[dx][dy] = 1;
                DFS(dx,dy);
                //vis[dx][dy] = 0;
            }
        }
    }

    return ;
}

int main(){
    int i,j;
    int ans;

    while(~scanf("%d%d",&m,&n)){
        if(m==0 && n==0){
            break;
        }
        for(i=0;i<m;i++){
            scanf("%s",map[i]);
        }
        ans = 0;
        memset(vis,0,sizeof(vis));
        for(i=0;i<m;i++){
            for(j=0;j<n;j++){
                if(map[i][j]=='@' && vis[i][j]==0){
                    vis[i][j] = 1;
                    ans++;
                    DFS(i,j);
                    //vis[i][j] = 0;
                }
            }
        }
        printf("%d\n",ans);
    }
}


版权声明:本文博客原创文章。博客,未经同意,不得转载。








本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4629750.html,如需转载请自行联系原作者


相关文章
|
7月前
|
机器学习/深度学习 人工智能 定位技术
|
8月前
|
算法
DFS and BFS
DFS and BFS
35 0
|
10月前
DFS:生日蛋糕
DFS:生日蛋糕
|
10月前
|
定位技术
DFS:踏青
DFS:踏青
|
11月前
|
算法
DFS深度优先搜索
DFS深度优先搜索
|
算法
【和zqy学算法】Day1:DFS与BFS
【和zqy学算法】Day1:DFS与BFS
121 0
|
存储 算法 PHP
深度优先搜索(DFS)
深度优先搜索(DFS)
160 0
深度优先搜索(DFS)
7-121 深入虎穴 (25 分)(dfs,bfs)
7-121 深入虎穴 (25 分)(dfs,bfs)
122 0
dfs
题目描述 你有一张某海域NxN像素的照片,"."表示海洋、"#"表示陆地,如下所示: ....... .##.... .##.... ....##. ..####. ...###. ....... 其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。 由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。 例如上图中的海域未来会变成如下样子: ....... ....... ....... ....... ....#.. ......
|
算法
迭代加深(DFS)
复习acwing算法提高课的内容,本篇为讲解算法:迭代加深,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
112 0
迭代加深(DFS)