TLE求助,dfs,有剪枝去重
  • 板块P1189 SEARCH
  • 楼主Deity_Satan
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/8/7 17:21
  • 上次更新2023/11/3 05:22:02
查看原帖
TLE求助,dfs,有剪枝去重
816528
Deity_Satan楼主2023/8/7 17:21
#include<bits/stdc++.h>
using namespace std;
const int Max=51;
int Wa[1001],n,t,p,x,y;
int vis[Max][Max];
bool b[Max][Max][Max];
int dx[]={0,1,0,-1,0};
int dy[]={0,0,1,0,-1};
int read(){//快读
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
void dfs(int xx,int yy,int l){
	if(b[xx][yy][l]==1) return;
	b[xx][yy][l]=1;
	if(l==n) {
		vis[xx][yy]=3;
		return;
	}
	int wy=Wa[l+1];
	for(int i=1;i<=4;i++){
		if(i==wy){
			int kx=xx+dx[i];
			int ky=yy+dy[i];
			if(kx<1 || ky<1 || kx>t || ky>p || vis[kx][ky]==1) continue;
			dfs(kx,ky,l); 
		}
		else {
			int kx=xx+dx[i];
			int ky=yy+dy[i]; 
			if(kx<1 || ky<1 || kx>t || ky>p || vis[kx][ky]==1) continue;
			dfs(kx,ky,l-1);;
		}
	}
	 
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	t=read();p=read();
	for(int i=1;i<=t;i++){
		for(int j=1;j<=p;j++){
			char c;
			c=read();
			if(c=='.') vis[i][j]=0;
			else if(c=='X') vis[i][j]=1;
			else{
				x=i;
				y=j;
				vis[i][j]=0;
			}
		}
	}
	n=read();
	string s;
	for(int i=1;i<=n;i++){
		s=read();
		if(s=="NORTH") Wa[i]=1;
		else if(s=="EAST") Wa[i]=2;
		else if(s=="SOUTH") Wa[i]=3;
		else Wa[i]=4;
	}
	dfs(x,y,0);
	for(int i=1;i<=t;i++){
		for(int j=1;j<=p;j++){
			if(vis[i][j]==0) cout<<'.';
			else if(vis[i][j]==1) cout<<'X';
			else cout<<'*';
		}
		cout<<'\n';
	}
}
2023/8/7 17:21
加载中...