洛谷 P1913 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.

思路:模拟,一共1000000个点,先提前与处理出某个点能否到无风区,然后o(1)判断即可。

 

#include<iostream>
using namespace std;
int n,m,num;
char a[1002][1002];
bool b[1002][1002];
void gui(int i,int j){
    b[i][j]=true;
    if(a[i+1][j]=='u')    gui(i+1,j);
    if(a[i-1][j]=='d')    gui(i-1,j);
    if(a[i][j+1]=='l')    gui(i,j+1);
    if(a[i][j-1]=='r')    gui(i,j-1);
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>a[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
              if(a[i][j]=='o')    gui(i,j);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(b[i][j]) num++;
    cout<<num; 
}

 

 

posted @ 2017-12-01 20:54  一蓑烟雨任生平  阅读(290)  评论(0编辑  收藏  举报