hdoj1241 Oil Deposits

题意:

  一个位置上有油会扩散到别的位置(上下左右,还有对角线上的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;
}
利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值