题目背景

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[][];
bool b[][];
void gui(int i,int j){
b[i][j]=true;
if(a[i+][j]=='u') gui(i+,j);
if(a[i-][j]=='d') gui(i-,j);
if(a[i][j+]=='l') gui(i,j+);
if(a[i][j-]=='r') gui(i,j-);
}
int main(){
cin>>n>>m;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
cin>>a[i][j];
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(a[i][j]=='o') gui(i,j);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(b[i][j]) num++;
cout<<num;
}
05-25 20:57