zoukankan      html  css  js  c++  java
  • 【HDU1198】Farm Irrigation(回溯+记忆化搜索)

    数据流小,深搜即可。有些暴力。看其他人的题解用二维转换成一维做的并查集很巧妙,马上去研究一下!!

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cstdio>
     5 #include <cmath>
     6 #include <cctype>
     7 #include <algorithm>
     8 #include <numeric>
     9 #include <string>
    10 #include <limits.h>
    11 #include <map>
    12 using namespace std;
    13 
    14 int m, n, ans = 0;
    15 char Map[55][55];
    16 bool vis[55][55];
    17 map<char, string> check;
    18 
    19 void dfs (int x, int y) {
    20 
    21     vis[x][y] = 1;
    22 
    23     if (check[Map[x][y]].find("U") != -1 && check[Map[x - 1][y]].find("D") != -1) {
    24         if (!vis[x - 1][y]) dfs (x - 1, y);
    25     }
    26 
    27     if (check[Map[x][y]].find("D") != -1 && check[Map[x + 1][y]].find("U") != -1) {
    28         if (!vis[x + 1][y]) dfs (x + 1, y);
    29     }
    30 
    31     if (check[Map[x][y]].find("L") != -1 && check[Map[x][y - 1]].find("R") != -1) {
    32         if (!vis[x][y - 1]) dfs (x, y - 1);
    33     }
    34 
    35     if (check[Map[x][y]].find("R") != -1 && check[Map[x][y + 1]].find("L") != -1) {
    36         if (!vis[x][y + 1]) dfs (x, y + 1);
    37     }
    38 }
    39 
    40 int main () {
    41 
    42     check['A'] = "UL";  check['B'] = "UR";  check['C'] = "DL";
    43     check['D'] = "DR";  check['E'] = "UD";  check['F'] = "LR";
    44     check['G'] = "ULR"; check['H'] = "UDL"; check['I'] = "DLR";
    45     check['J'] = "UDR"; check['K'] = "UDLR";
    46 
    47     while (~scanf("%d%d", &m, &n)) {
    48         if (m < 0 && n < 0) {
    49             break;
    50         }
    51         memset (vis, 0, sizeof(vis));
    52         memset (Map, 0, sizeof(Map));
    53         for (int i = 0; i < m ; ++ i) {
    54             for (int j = 0 ; j < n; ++ j) {
    55                 cin >> Map[i][j];
    56             }
    57         }
    58         ans = 0;
    59         for (int i = 0; i < m; ++ i) {
    60             for (int j = 0; j < n; ++j) {
    61                 if (vis[i][j] != 1) {
    62                     dfs (i, j);
    63                     ans ++;
    64                 }
    65             }
    66         }
    67 
    68         cout << ans << endl;
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    [VBA]根据身份证号码计算年龄的Excel函数
    [VBA]发布一个计算桩号之差的Excel自定义函数(VBA)
    [VBA]用一个简单例子说明如何在Excel中自定义函数
    元素定位工具:Chrome浏览器ChroPath插件
    68 个 Python 内置函数
    Python错误重试
    jenkins 中展示漂亮的 HTML 测试报告
    python解决接口数据使用了RSA加密和签名
    Python装饰器用法
    Pycharm中文版教程
  • 原文地址:https://www.cnblogs.com/Destiny-Gem/p/3869648.html
Copyright © 2011-2022 走看看