题解 P1913 【L国的战斗之伞兵】

· · 题解

其实这题很简单,找对方法是关键。

找到无风的o点,然后开始推路径,然后将能到的点设为true,最后统计TRUE的个数就AC

#include<iostream>
using namespace std;
int i,j,n,m,num;
char a[1002][1002];
bool b[1002][1002];
void gui(int i,int j)   //推路径
{  b[i][j]=true; //将这点记为true
  if(a[i+1][j]=='u') gui(i+1,j);
  if(a[i-1][j]=='d') gui(i-1,j);
  if(a[i][j+1]=='l') gui(i,j+1);
  if(a[i][j-1]=='r') gui(i,j-1);
}
int main()
{
   //freopen("Lsan.in","r",stdin);
   //freopen("Lsan.out","w",stdout);
   cin>>n>>m;
   for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>a[i][j];
   for(i=1;i<=n;i++) for(j=1;j<=m;j++)
      if(a[i][j]=='o') gui(i,j);  //如果是无风点,则开始推路
     for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(b[i][j]) num++; //统计个数
    cout<<num<<'\n'; //个人习惯,喜欢打换行符
 //fclose(stdin);fclose(stdout);
 //system("pause");
 return 0;   
}