hdoj1241 Oil Deposits

原创 2016年04月11日 17:32:00

题意:

  一个位置上有油会扩散到别的位置(上下左右,还有对角线上的4个相邻位置,一共8个位置,也就是以某个位置为中心的切比雪夫距离为1的8个点),计算”油堆”的数目.
  每一次遇到一个没有标记的有油的位置,就以它为起点进行BFS,把这一次BFS可以到达的地方标记(即漏油).然后,数油堆的方法:可以从(0,0)位置开始遍历到(n,n),遇到有油的地方,如果标记了就跳过,没有标记的就进行BFS,并且数目加1.最后输出这个数目就可以了.

代码:

// 78ms, 1824K
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;

struct Position {
    int x, y;

    Position(int x, int y) : x(x), y(y) {
    }
};

// 'adjacent' means 8 directions nearby(vertically, horizantally & diagonally)
const int DIR[8][2] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {-1, -1}, {1, -1}, {-1, 1} };
const int MAXN(101);
char maze[MAXN][MAXN];
bool isVisited[MAXN][MAXN];
int row, col;

inline
bool isValid(const int &x, const int &y) {
    return x >= 0 && y >= 0 && x < row && y < col;
}

void bfs(int start_x, int start_y) {
    queue<Position> positions;
    isVisited[start_x][start_y] = true;
    positions.push( Position(start_x, start_y) );
    while (!positions.empty()) {
        Position cur = positions.front();
        positions.pop();
        for (int dir = 0; dir < 8; ++dir) {
            int xx = cur.x + DIR[dir][0];
            int yy = cur.y + DIR[dir][1];
            if (isValid(xx, yy) && !isVisited[xx][yy] && maze[xx][yy] == '@') {
                isVisited[xx][yy] = true;
                positions.push( Position(xx, yy) );
            }
        }
    }
}


int main() {
    //freopen("in.txt", "r", stdin);
    while (cin >> row >> col) {
        if (0 == row && 0 == col) break;

        memset(isVisited, false, sizeof isVisited);
        for (int i(0); i < row; ++i) {
            for (int j(0); j < col; ++j) {
                cin >> maze[i][j];
            }
        }

        int result(0);
        /* 从左到右,从上到下扫描,
        *如果某个(油桶)位置没有被遍历过,就从这个位置开始以BFS的方式'扩散'(标记所有可达的位置)
        *如果该(油桶)位置在之前被标记了,就不用再标记了 
        */
        for (int i = 0; i < row; ++i) {
            for (int j = 0; j < col; ++j) {
                if (maze[i][j] == '@' && !isVisited[i][j]) {
                    //cout << "(" << i << ", " << j << ")" << endl;
                    ++result;
                    bfs(i, j);
                }
            }
        }
        cout << result << endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

UVa 572 - Oil Deposits 搜索专题

572 - Oil Deposits 11158 58.77% 5511 95.30% 题目链接: http://uva...
  • shuangde800
  • shuangde800
  • 2012年07月06日 00:52
  • 4501

[ACM - 深度优先搜索]Oil Deposits

Problem Description   The GeoSurvComp geologic survey company is responsible for detecting undergrou...
  • sr19930829
  • sr19930829
  • 2013年11月27日 09:22
  • 2130

hdu1241 Oil Deposits (bfs水题)

Problem Description The GeoSurvComp geologic survey company is responsible for detecting undergroun...
  • zxy160
  • zxy160
  • 2017年05月27日 20:17
  • 225

DFS入门精讲:油田(Oil Deposits UVA572)

传送门:https://vjudge.net/problem/UVA-572 具体原题看链接。 大意:输入一个m行n列字符矩阵,统计字符@组成多少个八连块(如果两个字符@所在格子横竖对角线方向相邻就...
  • qq_38121348
  • qq_38121348
  • 2017年05月23日 20:02
  • 116

Oil Deposits<hdoj1241>

Description The GeoSurvComp geologic survey company is responsible for detecting underground oil ...
  • KingJordon
  • KingJordon
  • 2016年07月29日 08:53
  • 103

hdoj1241 Oil Deposits

Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...
  • zhangxiaoxiang123
  • zhangxiaoxiang123
  • 2015年10月14日 07:26
  • 165

HDOJ1241 Oil Deposits

题意:每一个@的九宫格有其他@字符,说明这几个@字符是连通的,每一块不连通的@字符集是一块油田,问有几块? 本题利用BFS广搜,废话不多说,上代码(java): package cn.hncu.s...
  • jrdgogo
  • jrdgogo
  • 2016年03月11日 17:02
  • 271

ACM-DFS之Oil Deposits——hdu1241

Oil Deposits Problem Description The GeoSurvComp geologic survey company is responsible for detecti...
  • lx417147512
  • lx417147512
  • 2014年02月25日 12:47
  • 1846

杭电(hdu)1241 Oil Deposits

Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T...
  • IT142546355
  • IT142546355
  • 2015年08月15日 20:52
  • 333

POJ 1562:Oil Deposits

Oil Deposits Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14462   ...
  • u010885899
  • u010885899
  • 2015年07月31日 16:06
  • 422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdoj1241 Oil Deposits
举报原因:
原因补充:

(最多只允许输入30个字)