zoukankan      html  css  js  c++  java
  • 红与黑

    总时间限制:
    1000ms
    内存限制:
    65536kB
    描述
    有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。
    输入
    包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下
    1)‘.’:黑色的瓷砖;
    2)‘#’:白色的瓷砖;
    3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。
    当在一行中读入的是两个零时,表示输入结束。
    输出
    对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。
    样例输入
    6 9 
    ....#. 
    .....# 
    ...... 
    ...... 
    ...... 
    ...... 
    ...... 
    #@...# 
    .#..#. 
    0 0
    
    样例输出
    45
    
    参考代码
    /*再也不用x,y做变量了,每次都把其与行和列搞混/(ㄒoㄒ)/~~*/
    ///能到达的'.'用'#'补上,以'#'做边界
    #include <iostream>
    using namespace std;
    int ans;
    int w,h;//x方向的长和y方向的长
    char a[21][21];
    int di[5]={0,-1,1,0,0},dj[5]={0,0,0,-1,1};//控制方向数组
    void f(int si,int sj);
    int main()
    {
    
        int si,sj;//起始点
        while(1){
        cin>>w>>h;
        if(w==0&&h==0)
        break;
        ans=0;
        for(int i=1;i<=h;i++){
            for(int j=1;j<=w;j++){
                cin>>a[i][j];
                if(a[i][j]=='@'){
                    si=i;
                    sj=j;
                }
            }
        }
        f(si,sj);
        cout<<ans<<endl;
        }
        return 0;
    }
    void f(int si,int sj){
    if(sj<1||si<1||sj>w||si>h||a[si][sj]=='#'){
       return;
    }
    a[si][sj]='#';
    for(int i=1;i<=4;i++){
        f(si+di[i],sj+dj[i]);
    }
    ans++;
    
    }
  • 相关阅读:
    安卓API首页
    安卓开发学习1
    Unity3D安卓交互
    跨天查询,少一天的问题
    COALESCE关键字的使用
    Map构造器模式 map builder pattern
    Linux服务器端使用tcpdump抓redis报文
    Java Unsigned Bytes
    JAVA与c#中byte取值范围的差异
    jack反序列化自定义字段绑定,报错:can only instantiate non-static inner class by using default, no-argument constructor
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/7404484.html
Copyright © 2011-2022 走看看