题目背景
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;
}