伞兵 & 钓鱼的肝

题目描述

为了在敌国渗透作战,指挥官决定:派出伞兵前往敌国!然而敌国的风十分强烈,能让伞兵在同一高度不停转悠,直到被刮到一个无风区......

输入格式

第一行两个整数 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

我们可以通过模拟来解,他让我们往哪就往哪

好的,提示就到这里,现在代码答案

cpp 复制代码
//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这次的博文就到这里,没点关注的关注一下呗~如果可以就善意的评论壹下呗~在点个赞就更完美了~

收工!