poj 1979 Red and Black(BFS)

题意:在一个矩形房间里面被瓦片覆盖,分为白色的和红色的,白的可以走,红的不能走,起始位置在白色的瓦片上,可以上下左右移动;

".":白色的瓦片;

"#":红色的瓦片;

"@":起始位置;

计算可以移动到的白色瓦片的数量;

思路:bfs搜索,设一个变量sum记录,进队就自加;

代码如下:

#include <iostream>
#include <cstdio>
#include <memory.h>
#include <queue>
using namespace std;
char map_[25][25];
int w,h;
struct Node{
    int x,y;
};
int vis[25][25];
int ax[4] = {-1,0,1,0};
int ay[4] = {0,1,0,-1};
int BFS(Node no){
    queue<Node> mq;
    while(!mq.empty()){
        mq.pop();
    }
    mq.push(no);
    vis[no.x][no.y] = 1;
    int sum = 0;
    while(!mq.empty()){
        Node de = mq.front();
        mq.pop();
        sum++;
        for(int i=0;i<4;i++){
            Node d = de;
            d.x =de.x+ax[i];
            d.y =d.y+ay[i];
            if(vis[d.x][d.y]==0&&d.x>=0&&d.x<h&&d.y>=0&&d.y<w&&map_[d.x][d.y]==‘.‘){
                vis[d.x][d.y] = 1;
                mq.push(d);
            }
        }
    }
    return sum;
}

int main()
{
    while(~scanf("%d%d",&w,&h)){
        if(w==0&&h==0)return 0;
        int x,y;
        memset(map_,0,sizeof(map_));
        memset(vis,0,sizeof(vis));
        for(int i=0;i<h;i++){
            scanf("%s",map_[i]);
            for(int j=0;map_[i][j];j++){
                if(map_[i][j]==‘@‘){
                    x = i;
                    y = j;
                }
            }
        }
        Node no;
        no.x = x;no.y = y;
        int a = BFS(no);
        printf("%d\n",a);
    }
    return 0;
}
时间: 2024-12-11 14:59:49

poj 1979 Red and Black(BFS)的相关文章

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

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

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

《挑战》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 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

POJ 1979 Red and Black

http://poj.org/problem?id=1979 方法和Lake Counting 完全一样 1 #include <iostream> 2 #include <stdio.h> 3 4 using namespace std; 5 //思路与Lake counting 完全一样 6 const int maxsize = 128; 7 int M,N,cnt; 8 char room[maxsize][maxsize]; 9 int d[2][4] = {{-1, 0

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

POJ 1979 Red and Black (深搜)

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 23095   Accepted: 12467 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