• POJ-1979


    Red and Black
    Time Limit: 1000MS   Memory Limit: 30000K
    Total Submissions: 36371   Accepted: 19731

    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) 
    The end of the input is indicated by a line consisting of two zeros. 

    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求出所有可行路径,每走过一次则将' . '转换为' # ',防止重复。

    AC代码:

     1 #include<bits/stdc++.h>//注意poj提交时需要更换头文件
     2 using namespace std;
     3 
     4 int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
     5 char mp[50][50];
     6 int w,h,sx,sy;
     7 int res;
     8 
     9 void dfs(int x,int y){
    10     //cout<<mp[x][y]<<endl;
    11     if(mp[x][y]=='.'){
    12         res++;
    13         mp[x][y]='#';
    14         //cout<<x<<' '<<y<<endl;
    15     }
    16     else
    17     return ;
    18     for(int i=0;i<4;i++){
    19         x+=dx[i];
    20         y+=dy[i];
    21         //cout<<x<<" "<<y<<endl;
    22         dfs(x,y);
    23         x-=dx[i];
    24         y-=dy[i]; 
    25     }
    26     return ;
    27 }
    28 
    29 int main(){
    30     ios::sync_with_stdio(false);
    31     while(cin>>w>>h&&w&&h){
    32         memset(mp,'#',sizeof(mp));
    33         for(int i=0;i<h;i++){
    34             for(int j=0;j<w;j++){
    35                 cin>>mp[i][j];
    36                 if(mp[i][j]=='@'){
    37                     sx=i;
    38                     sy=j;
    39                 }
    40             }
    41         }
    42         mp[sx][sy]='.';
    43         res=0;
    44         dfs(sx,sy);
    45         cout<<res<<endl;
    46     }
    47     return 0;
    48 } 
  • 相关阅读:
    HTTP协议
    优化特定类型的查询
    Feign性能优化注意事项
    Spring Cloud(Netflix) Feign: 以Dubbo暴露服务的方式使用Feign
    Swagger注解
    Myeclipse、eclipse安装lombok
    微服务和单体架构的区别以及springClould版本的说明
    索引优化是对查询性能优化最有效的手段
    Schemal和数据类型的优化
    spring定时器的使用
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/7241758.html
Copyright © 2020-2023  润新知