• HDU 1312 Red and Black


    题目链接:HDU 1312

    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 on black tiles.

    Write a program to count the number of black tiles which he can reach by repeating the moves described above.

    Input

    The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20.

    There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows.

    '.' - a black tile
    '#' - a red tile
    '@' - a man on a black tile(appears exactly once in a data set)

    Output

    For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself).

    Sample Input

    6 9
    ....#.
    .....#
    ......
    ......
    ......
    ......
    ......
    #@...#
    .#..#.
    11 9
    .#.........
    .#.#######.
    .#.#.....#.
    .#.#.###.#.
    .#.#..@#.#.
    .#.#####.#.
    .#.......#.
    .#########.
    ...........
    11 6
    ..#..#..#..
    ..#..#..#..
    ..#..#..###
    ..#..#..#@.
    ..#..#..#..
    ..#..#..#..
    7 7
    ..#.#..
    ..#.#..
    ###.###
    ...@...
    ###.###
    ..#.#..
    ..#.#..
    0 0

    Sample Output

    45
    59
    6
    13

    题意

    输入一个“迷宫”,有红色和黑色方块两种,从给定起点出发,问能到达最多的黑色方块的数量

    题解:

    DFS水题一道,有点像数鱼塘油井什么的,从起点开始,把周围可走的黑色方块变红:改.为#,同时计数。

    代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<string>
    #include<cstring>
    #include<vector>
    #include<stack>
    #include<bitset>
    #include<cstdlib>
    #include<cmath>
    #include<set>
    #include<list>
    #include<deque>
    #include<map>
    #include<queue>
    
    using namespace std;
    
    typedef long long ll;
    
    const double PI = acos(-1.0);
    const double eps = 1e-6;
    const int INF = 0x3f3f3f3f;
    const int N = 2e5 + 5;
    char feld[21][21];
    int gx, gy;
    int n, m;
    int dir[4][2] = { 0,1,1,0,0,-1,-1,0 };
    void dfs(int x,int y) {
    	int nx, ny;
    	for (int i(0); i < 4; i++) {
    		nx = x + dir[i][0];
    		ny = y + dir[i][1];
    		if (nx >= 0 && nx < n&&ny >= 0 && ny < m&&feld[nx][ny] == '.') {
    			feld[nx][ny] = '*';
    			dfs(nx, ny);
    		}
    	}
    }
    int main() {
    	while (cin >> m >> n,m) {
    		int num = 0;
    		memset(feld, 0, sizeof(feld));
    		for (int i(0); i < n; i++) {
    			cin >> feld[i];
    			for (int j(0); j < m; j++)
    				if (feld[i][j] == '@')
    					gx = i, gy = j;
    		}
    		feld[gx][gy] = '*';
    		dfs(gx,gy);
    		for (int i(0); i < n; i++)
    			for (int j(0); j < m; j++)
    				if (feld[i][j] == '*')
    					num++;
    		cout << num << endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    springmvc 注解式开发 处理器方法的返回值
    springmvc 注解式开发 接收请求参数
    【洛谷P1379】八数码难题 状压bfs
    【模板】ST表
    【POJ1741】Tree
    【洛谷P1073】最优贸易
    【POJ3662】Telephone Lines dij + 二分答案
    【模板】spfa
    【洛谷P2384】最短乘积路径
    【bzoj2038】小Z的袜子
  • 原文地址:https://www.cnblogs.com/Titordong/p/9591612.html
Copyright © 2020-2023  润新知