转向的次数由因素决定:
1.初始点具有方向,但不算一次转向
2.前一次 与 本次的方向 不一致算一次转向
题目要求:
1.每个位置的导向板只会使用一次,使用一次后需要 消失 此位置的导向板
2.没有导向板的位置,前进时 和 前一次的方向一致
注意:
1.记录前一次的方向
2.离开边界 的时候结束模拟
3.代码顺序:先记录 此点走过, 再 前进(变化人的坐标)
const int N=110;
char a[N][N];
int main()
{
int n,m,x,y;
cin>>n>>m>>x>>y;
int xx=x,yy=y;
for( int i=1;i<=n;i++ )
for( int j=1;j<=m;j++ )
cin>>a[i][j];
int ans=0,f=0;;
while( 1 )
{
if( x<1 || x>n || y<1 || y>m ) break;
if( a[x][y]=='U') {
if( (x!=xx || y!=yy) &&f!=1) ans++;
a[x][y]='G';//先
x=x-1;//后
f=1;
}
else if( a[x][y]=='D') {
if( (x!=xx || y!=yy) &&f!=2) ans++;
a[x][y]='G';
x=x+1;
f=2;
}
else if( a[x][y]=='L' ) {
if( (x!=xx || y!=yy) &&f!=3) ans++;
a[x][y]='G';
y=y-1;
f=3;
}
else if(a[x][y]=='R') {
if( (x!=xx || y!=yy) && f!=4) ans++;
a[x][y]='G';
y=y+1;
f=4;
}
else if( a[x][y]=='G')
{
if( f==1 ) x=x-1;
else if( f==2) x=x+1;
else if( f==3) y = y-1;
else if( f==4) y = y+1;
}
}
cout<<ans;
return 0;
}