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.
找到无风点的时候倒推路径,每到一个点就标记来过
最后数一下来过点的个数
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[1005][1005];
int n,m;
bool v[1005][1005];
long long ans=0;
void dfs(int x,int y)
{
v[x][y]=true;
if(a[x-1][y]=='d')
dfs(x-1,y);
if(a[x+1][y]=='u')
dfs(x+1,y);
if(a[x][y-1]=='r')
dfs(x,y-1);
if(a[x][y+1]=='l')
dfs(x,y+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')
dfs(i,j);
}
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(v[i][j])
{
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}