POJ 1979 Red and Black dfs 难度:0

http://poj.org/problem?id=1979

#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 21;
bool vis[maxn][maxn];
char maz[maxn][maxn];
int n,m;
const int dx[4] = {1,-1,0,0};
const int dy[4] = {0,0,1,-1};
int ans;

bool in(int x,int y)
{
    return x >= 0 && x < n  && y >= 0 && y < m;
}

void dfs(int x,int y)
{
    for(int i = 0;i < 4;i++)
    {
        int tx = x + dx[i],ty = y + dy[i];
        if(in(tx,ty) && !vis[tx][ty] && maz[tx][ty] != ‘#‘)
        {
            ans++;
            vis[tx][ty] = true;
            dfs(tx,ty);
        }
    }
}

int main(){
    while(scanf("%d%d",&m,&n) == 2 && (m || n))
    {
        ans = 0;
        memset(vis,0,sizeof vis);
        for(int i = 0;i < n; i++)
        {
            scanf("%s",maz[i]);
        }
        for(int x = 0;x < n; x++)
        {
            for(int y = 0;y < m;y++)
            {
                if(!vis[x][y] && maz[x][y] == ‘@‘)
                {
                    ans++;
                    vis[x][y] = true;
                    dfs(x,y);
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-10-04 06:15:36

POJ 1979 Red and Black dfs 难度:0的相关文章

POJ 1979 Red and Black(DFS 连通块中元素数量)

题意  求矩阵中包含'@'的'.'连通块中元素数量  '@'也看做'.' 最基础的dfs了 #include<cstdio> #include<cstring> using namespace std; const int N = 30; char mat[N][N]; int dx[4] = {0, 0, -1, 1}, dy[4] = { -1, 1, 0, 0}; int ans; void dfs(int r, int c) { if(mat[r][c] != '.') r

poj 1979 Red and Black(dfs)

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 23191   Accepted: 12510 Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a

POJ 1979 Red and Black (红与黑)

POJ 1979 Red and Black (红与黑) Time Limit: 1000MS    Memory Limit: 30000K Description 题目描述 There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to

POJ 1979 Red and Black 深度优先搜索上手题

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21738   Accepted: 11656 Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a

POJ 1979 Red and Black【深度优先搜索】

题目链接:http://poj.org/problem?id=1979 题目大意:一个矩形的房间地板被分为w*h个小块,每一个小块不是红的就是黑的,你首先站在一个黑色小块上,你只能朝你的四个方向(上下左右)移动,且不能到达红色的小块上,问你最多能到达多少个小块. 很简单的dfs深度优先搜索 没搜索过一个格子,将该格子设置为红色,之后的搜索就不会再搜索到该格子,就不会造成重复,因为该题有很多数据,记得每次处理数据是初始化各数组及其他数据. 代码如下: #include <iostream> #i

《挑战》2.1 POJ POJ 1979 Red and Black (简单的DFS)

B - Red and Black Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1979 Description There is a rectangular room, covered with square tiles. Each tile is col

POJ 3009 Curling 2.0 回溯,dfs 难度:0

http://poj.org/problem?id=3009 如果目前起点紧挨着终点,可以直接向终点滚(终点不算障碍) #include <cstdio> #include <cstring> using namespace std; const int maxn = 21; int maz[maxn][maxn]; int n,m; const int dx[4] = {1,-1,0,0}; const int dy[4] = {0,0,1,-1}; bool in(int x,

POJ 1979 Red and Black(简单DFS)

Red and Black Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he

poj 1979 Red and Black(dfs水题)

Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only