fengyun@fengyun-server:~/learn/acm/poj$ cat 1979.cpp
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<iterator>
#include<sstream>//istringstream
#include<cstring>
#include<queue>

using namespace std;

char map[21][21];
char visited[21][21];
int w, h;
int ans;

void dfs(int i, int j)
{
   if(i<0||i>=h||j<0||j>=w)
       return;
   if(map[i][j]=='#')
       return;
   if(map[i][j]=='.'&&visited[i][j]==0)
   {
        ans++;
        visited[i][j]=1;
        dfs(i-1,j);
        dfs(i+1,j);
        dfs(i,j+1);
        dfs(i,j-1);
   }

}

int dir[4][2]={
    {-1, 0},
    {1, 0},
    {0, 1},
    {0, -1},
};
void bfs(int i, int j)
{
    queue<int> q;
    q.push(i*w+j);
    visited[i][j]=1;

    while(!q.empty())
    {
        //pop
        //add neighbors
        int ni,nj;
        ni=q.front()/w;
        nj=q.front()%w;
        q.pop();
        ans++;
        for(int k=0;k<4;k++)
        {
            int row=ni+dir[k][0];
            int col=nj+dir[k][1];
            if(row>=0&&row<h&&col>=0&&col<w&&map[row][col]=='.'&&visited[row][col]==0)
            {
                visited[row][col]=1;
                q.push(row*w+col);
            }
           
        }
       
    }

}

int main()
{
    while(cin>>w>>h && (w||h))
    {
        int x, y;
        memset(visited, 0, sizeof(visited));
        ans=0;
        for(int i=0;i<h;i++)
        {
            for(int j=0;j<w;j++)
            {
                cin>>map[i][j];
                if(map[i][j]=='@')
                {
                    x=i;
                    y=j;
                    map[i][j]='.';
                }
            }
        }

        //dfs(x,y);
        bfs(x,y);
        cout<<ans<<endl;
    }

    return 0;
}

POJ 1979 dfs和bfs两种解法的更多相关文章

  1. HDU 2102 A计划 DFS与BFS两种写法 [搜索]

    1.题意:一位公主被困在迷宫里,一位勇士前去营救,迷宫为两层,规模为N*M,迷宫入口为(0,0,0),公主的位置用'P'标记:迷宫内,'.'表示空地,'*'表示墙,特殊的,'#'表示时空传输机,走到这 ...

  2. Java描述表达式求值的两种解法:双栈结构和二叉树

    Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保 ...

  3. 51nod 1165 整边直角三角形的数量(两种解法)

    链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1165 直角三角形,三条边的长度都是整数.给出周长N,求符合条件的三角形数量. ...

  4. POJ 1157 LITTLE SHOP OF FLOWERS (超级经典dp,两种解法)

    You want to arrange the window of your flower shop in a most pleasant way. You have F bunches of flo ...

  5. POJ 1182食物链(分集合以及加权两种解法) 种类并查集的经典

    题目链接:http://icpc.njust.edu.cn/Problem/Pku/1182/ 题意:给出动物之间的关系,有几种询问方式,问是真话还是假话. 定义三种偏移关系: x->y 偏移量 ...

  6. Letter Combinations of a Phone Number:深度优先和广度优先两种解法

    Letter Combinations of a Phone Number Given a digit string, return all possible letter combinations ...

  7. 【Java面试真题】剑指Offer53.2——0~n-1中缺失的数字(异或、二分两种解法)

    [Java实现]剑指Offer53.2--0~n-1中缺失的数字:面试真题,两种思路分享 前面有另一道面试题[Java实现]剑指offer53.1--在排序数组中查找数字(LeetCode34:在排序 ...

  8. leetcode-91-解码方法(动态规划和递归两种解法)

    题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数 ...

  9. Sort List[leetcode] 由归并排序的递归和循环,到本题的两种解法

    归并排序能够有两种思路----top-down 和 bottom-up top-down: 递归实现,将数组分成两半.分别处理.再合并. 伪代码例如以下: split ( A[], l, r) { i ...

随机推荐

  1. 【C#学习笔记】载入图片并居中

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. Oracle 课程六之hint

    课程目标 完成本课程的学习后,您应该能够: •什么是oracle hint •Hint的使用范围 •Hint 汇总 •演示常用的hint   Hint简介 Hint是oracle 提供的一种SQL语法 ...

  3. ch02-HTML的基本概念

    HTML的基本概念 Ch02: HTML的基本概念 1, 标记: 每一组HTML标记,都会被放在"<>"里面,用于控制里面的文字显示效果及其它一些用途. 语法: 开始标 ...

  4. golang语言部分保留字的举例

    golang和c的代码有很大不同的,一不小心就会误用. 1 /* go保留字: */ /* break default func interface select case defer go map ...

  5. Delphi RichEdit操作

    1.选择设置对齐 RichEdit1.SelectAll;RichEdit1.Paragraph.Alignment:=taLeftJustify; // switch for other align ...

  6. VC++6.0连接Access数据库

    建立一个连接数据库的类: 1.头文件:ADOConn.h #import "C:\Program Files\Common Files\System\ado\msado15.dll" ...

  7. wireshark http过程

    一直研究lighttpd源码,顺便看下网络编程,不说太多,开始吧 第一步 设置wireshark过滤规则 tcp.port eq 81 ,然后开始捕捉 第二步  http://183.61.16.16 ...

  8. codeforce 702C Cellular Network 二分答案

    http://codeforces.com/contest/702 题意:n个村庄,m个机站,问机站最短半径覆盖完所有村庄 思路:直接二分答案 二分太弱,调了半天..... // #pragma co ...

  9. linux查看端口信息以及关闭进程

     lsof -i:6633 查看端口6633的使用情况 kill  (+PID数值),结束进程

  10. flot图表的使用

    Flot是一套用Javascript写的绘制图表用的函式库, 专门用在网页上执行绘制图表功能, 由于Flot利用jQuery所以写出来的, 所以也称它为jQuery Flot ,它的特点是体积小.执行 ...