zoukankan      html  css  js  c++  java
  • ZOJ Problem Set

    ZOJ Problem Set - 2165
    Red and Black

    Time Limit: 2 Seconds      Memory Limit: 65536 KB

    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

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #define MAX 30
    using namespace std;
    char map[MAX][MAX];
    int count=0;
    int w,h;
    int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
    void dfs(int r,int c)
    {
    //	cout<<"r: "<<r<<" c: "<<c<<endl;
    	//getchar();
    	if(r<=0||c<=0||r>h||c>w)
    	{
    		return;
    	}
    	map[r][c]='#';
    	for(int i=0;i<4;i++)
    	{
    		if(map[r+dir[i][0]][c+dir[i][1]]=='.')
    		{
    		//	map[r+dir[i][0]][c+dir[i][1]]='#';
    			count++;
    			dfs(r+dir[i][0],c+dir[i][1]);
    		//	map[r+dir[i][0]][c+dir[i][1]]='.';
    		}
    	}
    }
    int main()
    {
    	while(cin>>w>>h)
    	{
    		if(w==0||h==0)break;
    		int sr,sc;
    		count=0;
    		memset(map,0,sizeof(map));
    		for(int i=1;i<=h;i++)
    		{
    			for(int j=1;j<=w;j++)
    			{
    				cin>>map[i][j];
    				if(map[i][j]=='@')
    				{
    					sr=i;sc=j;
    				}
    			}
    		}
    		map[sr][sc]='#';
    		//cout<<"Mark #1"<<endl;
    		dfs(sr,sc);
    		cout<<count+1<<endl;
    	}
    }


     

  • 相关阅读:
    BZOJ 3132: 上帝造题的七分钟 树状数组+差分
    PAT Advanced 1006 Sign In and Sign Out (25 分)
    PAT Advanced 1011 World Cup Betting (20 分)
    PAT Basic 1032 挖掘机技术哪家强 (20 分)
    PAT Basic 1028 人口普查 (20 分)
    PAT Basic 1004 成绩排名 (20 分)
    大数据数据库HBase(二)——搭建与JavaAPI
    PAT Advanced 1009 Product of Polynomials (25 分)(vector删除元素用的是erase)
    PAT Advanced 1002 A+B for Polynomials (25 分)(隐藏条件,多项式的系数不能为0)
    PAT Basic 1041 考试座位号 (15 分)
  • 原文地址:https://www.cnblogs.com/jackwuyongxing/p/3366493.html
Copyright © 2011-2022 走看看