poj 1979 dfs

水过,注意边界不能超出。

#include <iostream>
using namespace std;
int n, m, sx, sy, dir[4][2] = {0, -1, 0, 1, 1, 0, -1, 0}, count;
char diagram[23][23];

void get_diagram(void) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> diagram[i][j];
            if (diagram[i][j] == ‘@‘) {
                sx = i;
                sy = j;
            }
        }
    }
}

void dfs(int x, int y) {
    count++;
    diagram[x][y] = ‘#‘;
    for (int i = 0; i < 4; i++) {
        if (x + dir[i][0] >=0 && x + dir[i][0] < n && y + dir[i][1] >= 0 && y + dir[i][1] < m && diagram[x + dir[i][0]][y + dir[i][1]] != ‘#‘) {
            dfs(x + dir[i][0], y + dir[i][1]);
        }
    }
    return;
}

int main(void) {
    while (cin >> m >> n, n*n + m*m) {
        get_diagram();
        count = 0;
        dfs(sx, sy);
        cout << count << endl;
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 19:43:33

poj 1979 dfs的相关文章

poj 1979 dfs水题

// 练练水题,夯实基础吧 #include <algorithm> #include <bitset> #include <cassert> #include <cctype> #include <cfloat> #include <climits> #include <cmath> #include <complex> #include <cstdio> #include <cstdlib

《挑战》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 (红与黑)

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 &amp;&amp; zoj 2165 Red and Black

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22409   Accepted: 12100 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 POJ 3009 AOJ 0033 AOJ 0118 [搜索类题目][0033贪心模拟]

/** POJ 1979 BFS */ #include <stdio.h> #include <string.h> #include <iostream> #include <queue> using namespace std; const int N = 20 + 5; int mp[N][N]; int sx,sy; int n, m; int vis[3000]; int dirx[] = {0, 1, 0, -1}; int diry[] = {

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

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

POJ 3321 DFS序+线段树

单点修改树中某个节点,查询子树的性质.DFS序 子树序列一定在父节点的DFS序列之内,所以可以用线段树维护. 1: /* 2: DFS序 +线段树 3: */ 4:   5: #include <cstdio> 6: #include <cstring> 7: #include <cctype> 8: #include <algorithm> 9: #include <vector> 10: #include <iostream> 1

poj 1167 DFS

1 /* 2 题意:给出0-59的一排数字表示某一时刻出现了1辆bus,其中数字重复出现表示多辆bus同时出现,这些bus是 3 由多个bus线路组成的,每条线路都有一个时间间隔,而且同一线路的bus在0-59肯定会出现两次或以上,如果 4 有两条线路的间隔相同且到达时刻相同也算作两条不同的线路,问最少有多少条线路. 5 6 题解:DFS 7 这题是一题相对较难的搜索,关键在于找出状态以及剪枝: 8 对于每条bus线路都由开始时刻start和间隔interval组成,这样就找出了表示一条线路的状