zoukankan      html  css  js  c++  java
  • POJ 2386 Lake Counting

    题意:输入一个 n 行 m 列 的矩阵, 搜索有多少个连通 ‘W'字母块

    题解:DFS。

    有个疑惑,就是输入一个字符串AC,一个字母一个字母的输入会 wa

    找Bug找了一个小时多,甚至怀疑过自己的算法写错了,现在都没想通

    莫名其妙贡献的一发wa. 欢迎大佬看见能告诉我QAQ

    #include <iostream>
    #include <queue>
    #include <stdio.h>
    #include <vector>
    #include <string>
    #include <map>
    #include <algorithm>
    #include <cstring>
    #define INF 0x3f3f3f3f
    using namespace std;
    const int N = 110;
    char mp[N][N];
    int n,m,ans = 0;
    int dir[8][2]={{-1,1},{-1,0},{-1,-1},{0,1},{0,-1},{1,1},{1,0},{1,-1}};  //八个方向
    bool inbound(int x, int l, int r)  //判断位置是否合法
    {
        if(x < l || x >= r) return false;  //不合法
        return true;
    }
    void dfs(int x, int y)
    {
        mp[x][y] = '.';   //访问过后覆盖
        for(int i = 0; i < 8; i++)
        {
            int tx = x + dir[i][0];
            int ty = y + dir[i][1];
            if(!inbound(tx,0,n) || !inbound(ty,0,m)) continue;  //位置不合法就结束本次循环
            if(mp[tx][ty] == 'W')  //递归搜索
                dfs(tx,ty);
        }
      //  return ;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i = 0; i < n; i++) scanf("%s",mp[i]);
    /***
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                scanf("%c",&mp[i][j]);
                ***/
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                if(mp[i][j] == 'W')
                {
                    ans++;
                    dfs(i,j);
                }
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
    

      

  • 相关阅读:
    Javascript中最常用的55个经典技巧
    Linux2.6--进程抢占和上下文切换
    redis 无法启动
    Dev GridView-Bind Detail Grid during runtime
    SharePoint场管理-PowerShell(二)
    SharePoint场管理-PowerShell(一)
    SharePoint的安装和配置-PowerShell
    SPField的GetValidatedString方法没有被调用
    PowerShell基础
    什么是工作流?
  • 原文地址:https://www.cnblogs.com/Edviv/p/12250779.html
Copyright © 2011-2022 走看看