zoukankan      html  css  js  c++  java
  • 瓷砖

    题目:在一个w x h的矩形广场上,每一块1 x 1的地面都铺设了红色或黑色的瓷砖。小林同学站在某一块黑色的瓷砖上,他可以从此处出发,移动到上、下、左、右四个相邻且是黑色的瓷砖上。现在,他想知道,通过重复上述移动能经过的黑色瓷砖数。

    数据输入:

    第1行为h、w,2<=w、h<=50,之间有一个空格隔开。

    以下为1个w行h列的二维字符矩阵,每个字符为“.”“#”“@”,分别表示该位置为黑色的瓷砖、红色的瓷砖、小林的初始位置。

    数据输出:

    输出一行一个整数,表示小林从初始位置出发可以经过的黑色瓷砖数。

    题解:一道"迷宫"题,用深搜,挨个上下左右枚举,如果是黑色瓷砖,dfs。否则不管,在定义一个flag数组,记录走过没有,如果走到一个没被走过的黑色瓷砖,ans++。

    #include<cstdio>
    #include<iostream>
    using namespace std;
    char a[60][60];
    bool flag[60][60];
    int ans=1;
    void dfs(int x,int y)//深搜函数
    {
        if(a[x+1][y]=='.' && !flag[x+1][y])//判断是否要dfs,下面同理
        {
            flag[x+1][y]=1;
            ans++;//答案++
            dfs(x+1,y);
        }
        if(a[x-1][y]=='.' && !flag[x-1][y])
        {
            flag[x-1][y]=1;
            ans++;
            dfs(x-1,y);
        }
        if(a[x][y+1]=='.' && !flag[x][y+1])
        {
            flag[x][y+1]=1;
            ans++;
            dfs(x,y+1);
        }
        if(a[x][y-1]=='.' && !flag[x][y-1])
        {
            flag[x][y-1]=1;
            ans++;
            dfs(x,y-1);
        }
        return;
    }
    int main()
    {
        int w,h;
        cin>>h>>w;
        int x,y;
       //读入
        for(int i=1;i<=w;i++)
        {
            for(int j=1;j<=h;j++)
            {
                cin>>a[i][j];
                if(a[i][j]=='@')
                {
                    x=i;
                    y=j;
                }
            }
        }
        dfs(x,y);//深搜
        cout<<ans<<endl;//输出
        return 0;
    }
    

      

  • 相关阅读:
    LeetCode-1370 Increasing Decreasing String
    LeetCode-1221 Split a String in Balanced Strings
    Neo4j 实战(三)-- Neo4j Loads CSV Files
    Neo4j 实战(二)-- neo4j 基础语句
    Java HashMap 学习笔记
    Markdown 入门笔记
    《知识图谱方法、实践与应用》读书笔记(第一遍)
    Java 数组复制
    LeetCode-496 Next Greater Element I Solution(with Java)
    linux 同步IO: sync、fsync与fdatasync
  • 原文地址:https://www.cnblogs.com/chen-1/p/9462933.html
Copyright © 2011-2022 走看看