高手教教我吧!!!已经改了三个小时了,几个高手都没看出来!!!
查看原帖
高手教教我吧!!!已经改了三个小时了,几个高手都没看出来!!!
878283
zhangruoshuiIMZ楼主2023/10/5 16:07
#include<bits/stdc++.h>
using namespace std;
char s[60][60];
char op[20];
int a[60][60];
int h[1010],l[1010];
int sea[60][60][60]; 
int t;
int n,m;
void dfs(int x,int y,int ii){
	for(int i=ii;i<=t;i++){
		if(ii+2==i){
			return;
		}
		
		int xx=x+h[i];
		int yy=y+l[i];
		if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]!=1&&s[xx][yy]!='X'&&sea[xx][yy][i]!=1){//cnt这是可以优化 
			dfs(xx,yy,i);
			sea[xx][yy][i]=1;
			if(i==t){
				a[xx][yy]=-1;
			} 
		}
//		else{
//			if(){
//				//这是else if(){}的由来吗? 
//			}
//		}
	}
}
int main(){

	scanf("%d%d",&n,&m);
	int bx,by;
	for(int i=1;i<=n;i++){
		scanf("%s",s[i]+1);
		for(int j=1;j<=m;j++){
			if(s[i][j]=='X'){
				a[i][j]=1;
			}
			if(s[i][j]=='*'){
				bx=i;
				by=j;
			}
		}
	}
	scanf("%d",&t);
	for(int i=1;i<=t;i++){
		scanf("%s",op+1);
		if(op[1]=='N'){
			h[i]=-1;
			l[i]=0;
		}
		else if(op[1]=='W'){
			l[i]=-1;
			h[i]=0;
		}
		else if(op[1]=='S'){
			h[i]=1;
			l[i]=0;
		}
		else if(op[1]=='E'){
			l[i]=1;
			h[i]=0;
		}
	}
	dfs(bx+h[1],by+l[1],1);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]==1){
				printf("X");
			}
			else if(a[i][j]==-1){
				printf("*");
			}
			else{
				printf(".");
			}
		}
		printf("\n");
	}
	return 0;
} 
2023/10/5 16:07
加载中...