热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

poj2386(深搜或广搜)

LakeCountingTimeLimit:1000MSMemoryLimit:65536K
Lake Counting
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 17917   Accepted: 9069

Description

Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field. A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors. 

Given a diagram of Farmer John's field, determine how many ponds he has.

Input

* Line 1: Two space-separated integers: N and M 

* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.

Output

* Line 1: The number of ponds in Farmer John's field.

Sample Input

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

Sample Output

3

这道题目比较基础,可以深搜也可以广搜

深搜快一点 36ms,广搜47ms。很好的练习题目。

把注释的去掉就是深搜了。

#include 
#include 
using namespace std;
#define N 102

char map[N][N];
int n,m;
struct Node
{
    int x,y;
};
int dis[10][3]={ {0,1},{0,-1},{-1,0},{1,0},{-1,-1},{-1,1},{1,-1},{1,1} };
void search(int a,int b)
{
    /*map[a][b]='.';
    for(int i=0;i<8;i++)
    {
        int tmpx=a+dis[i][0];
        int tmpy=b+dis[i][1];
        if(tmpx>0 && tmpx<=n && tmpy>0 && tmpy<=m && map[tmpx][tmpy]=='W' ){
            //map[tmpx][tmpy]='.';
            search(tmpx,tmpy);
        }
    }*/
    Node tmp,be;
    be.x=a,be.y=b;
    queue v;
    v.push(be);
    map[a][b]='.';
    while(!v.empty())
    {
        be=v.front();
        v.pop();
        for(int i=0;i<8;i++)
        {
            tmp.x=be.x+dis[i][0];
            tmp.y=be.y+dis[i][1];
            if(tmp.x>0 && tmp.x<=n && tmp.y>0 && tmp.y<=m && map[tmp.x][tmp.y]=='W' )
            {
                v.push(tmp);
                map[tmp.x][tmp.y]='.';
            }
        }
    }
}

int main()
{
    int i,j,count;
    while(~scanf("%d %d",&n,&m))
    {
        getchar();
        count=0;
        for(i=1;i<=n;i++){
            for(j=1;j<=m;j++){
                scanf("%c",&map[i][j]);}  ///缺了括号,害死人啊
            getchar();}
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(map[i][j]=='W')
                {
                    //printf("%d %d\n",i,j);
                    search(i,j);count++;
                }
        printf("%d\n",count);
    }
    return 0;
}
深搜递归写法
 
 
 
 
 
 
#include 
#include 
using namespace std;
#define N 102

char map[N][N];
int n,m;

void search(int i,int j)
{
    if(map[i][j-1]=='W') { map[i][j-1]='.'; search(i,j-1); }
    if(map[i][j+1]=='W') { map[i][j+1]='.'; search(i,j+1); }
    if(map[i-1][j]=='W') { map[i-1][j]='.'; search(i-1,j); }
    if(map[i+1][j]=='W') { map[i+1][j]='.'; search(i+1,j); }
    if(map[i-1][j-1]=='W') { map[i-1][j-1]='.'; search(i-1,j-1); }
    if(map[i-1][j+1]=='W') { map[i-1][j+1]='.'; search(i-1,j+1); }
    if(map[i+1][j-1]=='W') { map[i+1][j-1]='.'; search(i+1,j-1); }
    if(map[i+1][j+1]=='W') { map[i+1][j+1]='.'; search(i+1,j+1); }
}

int main()
{
    int i,j,count;
    while(~scanf("%d %d",&n,&m))
    {
        getchar();
        count=0;
        for(i=1;i<=n;i++){
            for(j=1;j<=m;j++){
                scanf("%c",&map[i][j]);}  ///缺了括号,害死人啊
            getchar();}
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(map[i][j]=='W')
                {
                    //printf("%d %d\n",i,j);
                    search(i,j);count++;
                }
        printf("%d\n",count);
    }
    return 0;
}


 
 




推荐阅读
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • JavaScript实现表格数据的实时筛选功能
    本文介绍如何使用JavaScript实现对表格数据的实时筛选,帮助开发者提高用户体验。通过简单的代码示例,展示如何根据用户输入的关键字动态过滤表格内容。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文探讨了如何在iOS开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 国际高保真音乐流媒体平台的崛起:亚马逊与谷歌的竞争策略
    近期,亚马逊和谷歌正积极筹备推出高保真音乐流媒体服务,预计在2019年底前上线。根据市场研究机构CIRP的数据,截至2018年12月,美国智能音箱的安装量已增至6600万台,较第三季度增长显著。这一趋势对Spotify等传统流媒体平台构成了新的挑战。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • This post discusses an issue encountered while using the @name annotation in documentation generation, specifically regarding nested class processing and unexpected output. ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 本文详细介绍了如何解决OBS在全屏录制时出现黑屏的问题,并提供了关于正确配置显卡以实现高效推流的指导。通过调整操作系统和显卡设置,确保OBS能够稳定运行并提供高质量的直播或录制体验。 ... [详细]
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
author-avatar
zeror01_119
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有