题目描述
为了在敌国渗透作战,指挥官决定:派出伞兵前往敌国!然而敌国的风十分强烈,能让伞兵在同一高度不停转悠,直到被刮到一个无风区……
输入格式
第一行两个整数 n,m,表示敌国的大小。
以下 n 行,每行 m 个字符,u
表示风向北吹;d
表示风向南吹;l
表示风向西吹;r
表示风向东吹;o
表示无风。(上北下南,左西右东)
输出格式
一个数:表示有几个点可以放下伞兵。
样例 #1
样例输入 #1
5 5
rrrrr
rdddr
rroll
uuuuu
uuuuu
样例输出 #1
19
提示
数据范围:1≤n,m≤1000
正片开始
ok,首先先分析一下样例
他的意思是
u=up=上
d=down=下
l=left=左
r=right=右
现在再使出我练习两年半的画技画出一个5*5的表格
再把数据填入表格
我们发现,如果按照 u上 d下 l左 r右 的走法,比如说伞兵出生在 (2,1) 的走法如下
他最终可以到达无风区o
我们可以通过模拟来解,他让我们往哪就往哪
好的,提示就到这里,现在代码答案
//csdnfishingliver diaoyudegan
#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
bool vis[1005][1005];
char g[1005][1005];
void dfs(int x,int y){vis[x][y]=1;if(g[x-1][y]=='d') dfs(x-1,y);if(g[x+1][y]=='u') dfs(x+1,y);if(g[x][y-1]=='r') dfs(x,y-1);if(g[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>>g[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(g[i][j]=='o'){vis[i][j]=1;dfs(i,j);}}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(vis[i][j]) ans++; }}cout<<ans;return 0;
}
ok这次的博文就到这里,没点关注的关注一下呗~如果可以就善意的评论壹下呗~在点个赞就更完美了~
收工!