不是bfs或dfs的新方法:
#include<bits/stdc++.h>
using namespace std;
char a[55][55];
int nz[55][55][2];
int r,c;
void N(int k){
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(nz[i][j]==k){
for(int s=i-1;s>=1;s--){
if(a[s][j]=='X')break;
nz[s][j][1]=k+1;
}
}
}
}
}
void S(int k){
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(nz[i][j]==k){
for(int s=i+1;s<=c;s++){
if(a[s][j]=='X')break;
nz[s][j]=k+1;
}
}
}
}
}
void W(int k){
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(nz[i][j]==k){
for(int s=j-1;s>=1;s--){
if(a[i][s]=='X')break;
nz[i][s]=k+1;
}
}
}
}
}
void E(int k){
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(nz[i][j]==k){
for(int s=j+1;s<=c;s++){
if(a[i][s]=='X')break;
nz[i][s]=k+1;
}
}
}
}
}
int main(){
cin>>r>>c;
int tx=0,ty=0;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>a[i][j];
if(a[i][j]=='*'){
tx=i,ty=j;
}
}
}
int n;
cin>>n;
nz[tx][ty]=1;
for(int k=1;k<=n;k++){
string ks;
cin>>ks;
if(ks=="NORTH"){
N(k);
}
if(ks=="SOUTH"){
S(k);
}
if(ks=="WEST"){
W(k);
}
if(ks=="EAST"){
E(k);
}
}
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(nz[i][j]==n+1)cout<<"*";
else{
if(a[i][j]=='*')a[i][j]='.';
cout<<a[i][j];
}
}
cout<<endl;
}
return 0;
}
90分,求调!