zoukankan      html  css  js  c++  java
  • Red and Black

    Red and Black

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
    Total Submission(s) : 49   Accepted Submission(s) : 30

    Font: Times New Roman | Verdana | Georgia

    Font Size:

    Problem 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
    

    Source

    Asia 2004, Ehime (Japan), Japan Domestic
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int fang[4][2]={1,0,0,1,-1,0,0,-1};
    bool mapused[25][25];
    char map[25][25];
    int n,m;//列 行;
    int number;
    int dfs(int a,int b)
    {
        if(a>=0&&a<=m&&b>=0&&b<=n)
        {
            
              //判断有没有越界
               if(map[a][b]=='#')//遇墙 返回
               {
                    return 0;
               }
           else
               if(mapused[a][b]==1)//遇到走过的 返回
              {
                return 0;
               }
            else//没走过 且不是墙;
            {
                mapused[a][b]=1;
                number++;
                int k;
                for(k=0;k<4;k++)//搜索4个方向
                {
                    dfs(a+fang[k][0],b+fang[k][1]);
                }
        
        
            }
    
        }//越界结束
        else return 0;
    
    
    
    }
    int main()
    {
        
        
        
        while(scanf("%d %d",&n,&m)!=EOF)//列 行
        {
            if(m==0&&n==0) break;
            memset(mapused,0,sizeof(mapused));
            number=0;
            memset(map,'#',sizeof(map));//初始化
            int i,j;
            int starx,stary;
            for(i=0;i<m;i++)
            {
                
                for(j=0;j<n;j++)
                {
                    cin>>map[i][j];
                    if(map[i][j]=='@')
                    {
                        starx=i;//
                        stary=j;//
                        
                    
                    }
                
                }
            
            }//输入地图;
            dfs(starx,stary);
            printf("%d
    ",number);
            
    
        
        
        
        
        }
    
    
    
    
    
    }
    这题广搜 深搜都可以
    要注意初始化 和越界判断
    每走过一步就 用mapused[] 标记已走过的地方 避免重复走
    这题 起点重@开始 算能走多少格
  • 相关阅读:
    Blank page instead of the SharePoint Central Administration site
    BizTalk 2010 BAM Configure
    Use ODBA with Visio 2007
    Handling SOAP Exceptions in BizTalk Orchestrations
    BizTalk与WebMethods之间的EDI交换
    Append messages in BizTalk
    FTP protocol commands
    Using Dynamic Maps in BizTalk(From CodeProject)
    Synchronous To Asynchronous Flows Without An Orchestration的简单实现
    WSE3 and "Action for ultimate recipient is required but not present in the message."
  • 原文地址:https://www.cnblogs.com/2013lzm/p/3263975.html
Copyright © 2011-2022 走看看