题目:https://www.luogu.com.cn/problem/P1189
代码:
#include<stdio.h>
int r,c,n,a,b,iq[1010];
char Map[55][55],input[6];
bool ans[55][55],flag[55][55][1010];
void dfs(int num,int x,int y){
if(flag[x][y][num]) return ;
if(num>=n){
ans[x][y]=true;
return ;
}
int i=x,j=y;
if(iq[num]==1) while(1){
j++;
if(j>=c || Map[x][j]=='X') break;
dfs(num+1,x,j);
}
if(iq[num]==2) while(1){
i++;
if(i>=r || Map[i][y]=='X') break;
dfs(num+1,i,y);
}
if(iq[num]==3) while(1){
j--;
if(j<0 || Map[x][j]=='X') break;
dfs(num+1,x,j);
}
if(iq[num]==4) while(1){
i--;
if(i<0 || Map[i][y]=='X') break;
dfs(num+1,i,y);
}
flag[x][y][num]=true;
return ;
}
int main(){
scanf("%d%d",&r,&c);
for(int i=0;i<r;i++) for(int j=0;j<c;j++) ans[i][j]=false;
for(int i=0;i<r;i++) scanf("%s",Map[i]);
for(int i=0;i<r;i++) for(int j=0;j<c;j++) if(Map[i][j]=='*'){
a=i;
b=j;
}
scanf("%d",&n);
for(int i=0;i<r;i++) for(int j=0;j<c;j++) for(int k=0;k<n;k++) flag[i][j][k]=false;
for(int i=0;i<n;i++){
scanf("%s",input);
if(input[0]=='E') iq[i]=1;
if(input[0]=='S') iq[i]=2;
if(input[0]=='W') iq[i]=3;
if(input[0]=='N') iq[i]=4;
}
dfs(0,a,b);
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
if(Map[i][j]=='X') printf("X");
else if(ans[i][j]) printf("*");
else printf(".");
}
printf("\n");
}
return 0;
}
开心一整天~