zoukankan      html  css  js  c++  java
  • L国的战斗之伞兵

    题目背景

    L国即将与I国发动战争!!

    题目描述

    为了在敌国渗透作战,指挥官决定:派出伞兵前往敌国!然而敌国的风十分强烈,能让伞兵在同一高度不停转悠,直到被刮到一个无风区……(可怜的小兵)

    输入输出格式

    输入格式:

    第一行:n、m两个正整数,表示敌国的大小。

    以下n行,每行m个字符,“u”表示风向北吹;“d”表示风向南吹;“l”表示风向西吹;“r”表示风向东吹;“o”表示无风。(上北下南,左西右东)

    输出格式:

    一个数:表示有几个点可以放下伞兵。

    输入输出样例

    输入样例#1: 复制
    5 5
    rrrrr
    rdddr
    rroll
    uuuuu
    uuuuu
    
    输出样例#1: 复制
    19

    说明

    数据范围:

    1≤n≤1000,1≤m≤1000.

    Solution:dfs推出能到达的点。

    #include<bits/stdc++.h>
    #define REP(i, a, b) for(int i = (a); i <= (b); ++ i)
    #define REP(j, a, b) for(int j = (a); j <= (b); ++ j)
    #define PER(i, a, b) for(int i = (a); i >= (b); -- i)
    using namespace std;
    const int maxn=1e3+5;
    template <class T>
    inline void rd(T &ret){
        char c;
        ret = 0;
        while ((c = getchar()) < '0' || c > '9');
        while (c >= '0' && c <= '9'){
            ret = ret * 10 + (c - '0'), c = getchar();
        }
    }
    int n,m,ans;
    bool ok[maxn][maxn];
    char str[maxn][maxn];
    void dfs(int x,int y){
          ok[x][y]=true;
          if(str[x+1][y]=='u')dfs(x+1,y);
          if(str[x-1][y]=='d')dfs(x-1,y);
          if(str[x][y-1]=='r')dfs(x,y-1);
          if(str[x][y+1]=='l')dfs(x,y+1);
          return;
    }
    int main()
    {
        rd(n),rd(m);
        REP(i,1,n)scanf("%s",str[i]+1);
        REP(i,1,n){
           REP(j,1,m){
              if(str[i][j]=='o')dfs(i,j);
           }
        }
        REP(i,1,n){
           REP(j,1,m){
              if(ok[i][j])ans++;
           }
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    第四阶段学习总结
    第三阶段学习总结
    第二阶段学习总结
    第一阶段内容的学习总结
    第四单元及OO课程总结
    关于工具的碎碎念
    第三单元博客总结
    第二单元博客总结
    第一单元作业总结
    实验五 单元测试
  • 原文地址:https://www.cnblogs.com/czy-power/p/10470022.html
Copyright © 2011-2022 走看看