• poj_2386_dfs


    描述

    由于最近的一场雨,农夫john的田地里很多地方流入了水,由一个N*M的矩形表示。每个方格要么有水(W)要么是干的(.)。农夫想要知道他的田地里形成了多少池塘。 一个池塘由有水的方块相连,每个方块8连通。

    思路

    对于每个点,8个方向深搜。

    属于同一个池塘的点不必重复搜索,因此可以用一个二维数组存放每个点是否被访问过的状态。(记忆化搜索)

    代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 
     7 int f[102][102], vis[102][102];
     8 int N, M;
     9 
    10 void read(int a[102][102],int n,int m)
    11 {
    12     for (int i = 0; i < n; i++)
    13     {
    14         char str[105];
    15         scanf("%s", str);
    16         for (int j = 0; j < m; j++)
    17             if (str[j] == 'W')
    18                 f[i][j] = 1;
    19 
    20     }
    21 }
    22 
    23 void dfs(int i, int j)
    24 {
    25     if (vis[i][j]||!f[i][j])return;
    26     if (i < 0 || i >= N || j < 0 || j >= M)return;
    27 
    28     vis[i][j] = 1;
    29     
    30     dfs(i - 1, j - 1);
    31     dfs(i - 1, j);
    32     dfs(i - 1, j + 1);
    33     dfs(i, j - 1);
    34     dfs(i, j + 1);
    35     dfs(i + 1, j - 1);
    36     dfs(i + 1, j);
    37     dfs(i + 1, j + 1);
    38 
    39 }
    40 
    41 int main()
    42 {
    43     //freopen("C:\\Users\\zgwng\\Desktop\\1852.txt", "r", stdin);
    44     scanf("%d %d", &N, &M);
    45 
    46     memset(f, 0, sizeof(f));
    47     memset(vis, 0, sizeof(vis));
    48     int pound = 0;
    49 
    50     read(f, N, M);
    51 
    52     for(int i=0;i<N;i++)
    53         for (int j = 0; j < M; j++)
    54         {
    55             if (f[i][j] && !vis[i][j])
    56             {
    57                 pound++;
    58                 dfs(i, j);
    59             }
    60         }
    61 
    62     cout << pound << endl;
    63 
    64     return 0;
    65 
    66 }
  • 相关阅读:
    Linux常用命令琐记
    JDK 在linux下支持epoll了
    八卦
    JDK 1.6中的并发
    关于Atomic
    关于并发程序设计(二)
    关于并发程序设计 (一)
    Herb Sutter的一些观点
    想到Exchanger N parties的一种用法
    该拒绝MSN Messager了
  • 原文地址:https://www.cnblogs.com/zhenghao2/p/6472331.html
Copyright © 2020-2023  润新知