神奇的做法,但T飞
  • 板块P1189 SEARCH
  • 楼主__Xiao__
  • 当前回复20
  • 已保存回复20
  • 发布时间2022/10/11 14:24
  • 上次更新2023/10/27 07:54:19
查看原帖
神奇的做法,但T飞
727563
__Xiao__楼主2022/10/11 14:24
#include<bits/stdc++.h>
using namespace std;
int n,m,q;
char a[51][51],b[51][51];
int f[3][10001];
int w[1001];//上->1,下->-1 ,左->-2,右->2
void dfs(int p,int x,int y){
	if(p==q+1){
		b[x][y]='*';
		return ;
	}
	if(w[p]==1) {
		for(int i=x-1;i>=1;i--){
			if(a[i][y]=='X')return ;
			dfs(p+1,i,y);
			
		}
	}
	else if(w[p]==-1) {
		for(int i=x+1;i<=n;i++){
			if(a[i][y]=='X')return ;
			dfs(p+1,i,y);
		}
	}
	else if(w[p]==-2) {
		for(int j=y-1;j>=1;j--){
			if(a[x][j]=='X')return ;
			dfs(p+1,x,j);
		}
	}
	else if(w[p]==2){
		for(int j=y+1;j<=m;j++){
			if(a[x][j]=='X')return ;
			dfs(p+1,x,j);
		}
	}
	return ;
}
int main(){
	cin>>n>>m;
	int x,y;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			if(a[i][j]=='*')x=i,y=j;
		}
	}
	cin>>q;	
	for(int i=1;i<=q;i++){
		string s;
		cin>>s;
		if(s=="NORTH"){
			w[i]=1;
		}
		else if(s=="WEST"){
			w[i]=-2;
		}
		else if(s=="SOUTH"){
			w[i]=-1;
		}
		else if(s=="EAST"){
			w[i]=2;
		}
	}
	f[1][0]=x;f[2][0]=y;
	dfs(1,x,y);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(b[i][j]=='*')cout<<'*';
			else if(a[i][j]!='*') cout<<a[i][j];
			else cout<<'.';
		}
		cout<<"\n";
	}
    return 0;
}/*
4 5 
..... 
.X... 
...*X 
X.X.. 
3 NORTH WEST SOUTH 


*/
2022/10/11 14:24
加载中...