• ZOJ 2165


    利用广度优先搜索,对可以达到的“.”进行统计;

    每一个点对应有4个方向,每一个都去尝试

    1. #include <iostream>
    2. #include <queue>
    3. #include <string.h>
    4. using namespace std;
    5. struct tile{
    6. public:
    7.     int x,y;
    8.     void init(int nx,int ny){
    9.         x=nx;
    10.         y=ny;
    11.     }
    12. };
    13. char square[21][21];
    14. int visit[21][21];
    15. int step[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
    16. int count(char square[21][21],tile start,int w,int h){
    17.     memset(visit,0,sizeof(visit));
    18.     int x,y,nx,ny,sum=0;
    19.     queue<tile> q;
    20.     q.push(start);
    21.     //cout<<square[1]<<endl;
    22.     while(!q.empty()){
    23.         tile t=q.front();
    24.         q.pop();
    25.         int x=t.x,y=t.y;
    26.         sum++;
    27.         for(int i=0;i<4;i++){                   //对4个方向进行统计
    28.             nx=x+step[i][0];
    29.             ny=y+step[i][1];
    30.             if(nx<0||nx>=w||ny<0||ny>=h)continue;
    31.             if(visit[nx][ny])continue;
    32.             if(square[ny][nx]!='.')continue;    
    33.             tile c;
    34.             c.init(nx,ny);
    35.             q.push(c);
    36.             visit[nx][ny]=1;
    37.         }
    38.     }
    39.     return sum;  
    40. }
    41. int main()
    42. {   int w,h,x,y;
    43.     while(cin>>w>>h){
    44.         if(w==0)break;
    45.         for(int i=0;i<h;i++){
    46.             for(int j=0;j<w;j++){
    47.                 cin>>square[i][j];
    48.                 if(square[i][j]=='@'){
    49.                     x=j;                          //列
    50.                     y=i;                          //行
    51.                 }
    52.             }
    53.         }
    54.         tile start;
    55.         start.init(x,y);
    56.         cout<<count(square,start,w, h)<<endl;
    57.         memset(square,'',sizeof(square));
    58.     }
    59.     return 0;
    60. }
  • 相关阅读:
    Android Studio打包过程和应用安装过程
    MVP模式和Clean模式
    Gradle入门学习---认识buildeTypes和dependencies
    微信小程序官方DEMO解读
    从ListView逐步演变到RecyclerView
    Mac下如何配置环境变量
    Android上滑手势触发和不增加布局层级扩大点击区域
    寻找Fragment的替代品的尝试
    高效的策略模式设计方法
    利用ListView的基本方法实现效果
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3843142.html
Copyright © 2020-2023  润新知