0分求调
  • 板块P1189 SEARCH
  • 楼主Czy54188
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/20 13:18
  • 上次更新2024/8/20 15:37:49
查看原帖
0分求调
1283894
Czy54188楼主2024/8/20 13:18
#include <bits/stdc++.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(i>=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;
}
2024/8/20 13:18
加载中...