dfs 9pts TLE求条
查看原帖
dfs 9pts TLE求条
380639
dthythxth_Huge_Brain楼主2023/11/17 11:08
#include<bits/stdc++.h>
#define D(x) std::cerr<<#x<<'='<<x;
int t,n,m,vis[22][22],ans;
char a[22][22];
void dfs(int x,int y,int ps){
	if(x==n&&y==m){
		ans=std::min(ans,ps);
		return;
	}
	if(a[x][y]=='-'){
		if(y>1&&!vis[x][y-1])vis[x][y-1]=1,dfs(x,y-1,ps+1),vis[x][y-1]=0;
		if(y<m&&!vis[x][y+1])vis[x][y+1]=1,dfs(x,y+1,ps+1),vis[x][y+1]=0;
	}
	else if(a[x][y]=='|'){
		if(x>1&&!vis[x-1][y])vis[x-1][y]=1,dfs(x-1,y,ps+1),vis[x-1][y]=0;
		if(x<n&&!vis[x+1][y])vis[x+1][y]=1,dfs(x+1,y,ps+1),vis[x+1][y]=0;
	}
	else if(a[x][y]=='+'){
		if(x>1&&!vis[x-1][y])vis[x-1][y]=1,dfs(x-1,y,ps+1),vis[x-1][y]=0;
		if(x<n&&!vis[x+1][y])vis[x+1][y]=1,dfs(x+1,y,ps+1),vis[x+1][y]=0;
		if(y>1&&!vis[x][y-1])vis[x][y-1]=1,dfs(x,y-1,ps+1),vis[x][y-1]=0;
		if(y<m&&!vis[x][y+1])vis[x][y+1]=1,dfs(x,y+1,ps+1),vis[x][y+1]=0;
	}
	
}
signed main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&m),memset(vis,0,sizeof vis),ans=INT_MAX;
		for(int i=1;i<=n;i++)scanf("%s",a[i]+1);
		dfs(1,1,0),printf("%d\n",ans<INT_MAX?ans+1:-1);
	}
	return 0;
}

2023/11/17 11:08
加载中...