题目链接
import java. util. *;
import java. math. *;
import java. io. *;
public class Main {
public static int n, m, ans[ ] [ ] , t, sx, sy, d[ ] ;
public static char map[ ] [ ] ;
public static int dx[ ] = { - 1 , 1 , 0 , 0 } ;
public static int dy[ ] = { 0 , 0 , - 1 , 1 } ;
public static void main ( String[ ] args) {
Scanner sc= new Scanner ( System. in) ;
n= sc. nextInt ( ) ;
m= sc. nextInt ( ) ;
sc. nextLine ( ) ;
map= new char [ n] [ m] ;
ans= new int [ n] [ m] ;
for ( int i= 0 ; i< n; i++ ) {
String s= sc. nextLine ( ) ;
map[ i] = s. toCharArray ( ) ;
for ( int j= 0 ; j< m; j++ )
if ( map[ i] [ j] == '*' ) {
map[ i] [ j] = '.' ;
sx= i; sy= j;
}
}
t= sc. nextInt ( ) ;
sc. nextLine ( ) ;
d= new int [ t] ;
for ( int i= 0 ; i< t; i++ ) {
char c= sc. nextLine ( ) . charAt ( 0 ) ;
if ( c== 'N' )
d[ i] = 0 ;
else if ( c== 'S' )
d[ i] = 1 ;
else if ( c== 'W' )
d[ i] = 2 ;
else
d[ i] = 3 ;
}
bfs ( ) ;
}
public static void bfs ( ) {
Queue< int [ ] > q= new LinkedList < int [ ] > ( ) ;
q. offer ( new int [ ] { sx, sy, 0 } ) ;
while ( ! q. isEmpty ( ) ) {
int [ ] cur= q. poll ( ) ;
int cx= cur[ 0 ] ;
int cy= cur[ 1 ] ;
if ( cur[ 2 ] == t) {
continue ;
}
int cd= d[ cur[ 2 ] ] ;
for ( int i= 1 ; i< Math. max ( n, m) ; i++ ) {
int nx= cx+ dx[ cd] * i;
int ny= cy+ dy[ cd] * i;
if ( nx< 0 || ny< 0 || nx== n|| ny== m|| map[ nx] [ ny] == 'X' )
break ;
if ( ans[ nx] [ ny] == cur[ 2 ] + 1 )
continue ;
ans[ nx] [ ny] = cur[ 2 ] + 1 ;
q. offer ( new int [ ] { nx, ny, cur[ 2 ] + 1 } ) ;
}
}
for ( int i= 0 ; i< n; i++ ) {
for ( int j= 0 ; j< m; j++ ) {
if ( ans[ i] [ j] == t)
System. out. print ( '*' ) ;
else
System. out. print ( map[ i] [ j] ) ;
}
System. out. println ( ) ;
}
}
}