TLE大悲(
查看原帖
TLE大悲(
377969
george0929楼主2023/5/24 20:45

TLE6个点,求优化。。。

#include<bits/stdc++.h>
using namespace std;
int arr[1005][1005],vis[1005][1005],ans,st;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int w,h;
void dfs(int x,int y,int t){
	if(arr[x][y]==-1){
		st=min(st,t);
		return;
	}
	for(int i=0;i<4;i++){
		int nx=x+dx[i],ny=y+dy[i];
		if(nx>=0&&ny>=0&&nx<=h+2&&ny<=w+2&&arr[nx][ny]!=1&&vis[nx][ny]!=1){
			vis[nx][ny]=1;
			dfs(nx,ny,t+1);
			vis[nx][ny]=0;
		}
	}
	return;
}
int main(){
	memset(arr,-1,sizeof(arr));
	cin>>w>>h;
	w=2*w+1;
	h=2*h+1;
	string nouse;
	getline(cin,nouse);
	for(int i=1;i<=h;i++){
		string c;
		getline(cin,c);
		for(int j=0;j<c.length();j++){
			if(c[j]=='+'||c[j]=='-'||c[j]=='|'){
				arr[i][j+1]=1;
			}else if(c[j]==' '){
				arr[i][j+1]=0;
			}
		}
	}
	for(int i=1;i<=h;i++){
		for(int j=1;j<=w;j++){
			if(arr[i][j]==0&&i%2==0){
				for(int i=1;i<=h;i++){
					for(int j=1;j<=w;j++){
						vis[i][j]=0;
					}
				}
				st=1145141919;
				dfs(i,j,0);
				ans=max(st/2,ans);
			}
		}
	}
	cout<<ans<<endl;
}
2023/5/24 20:45
加载中...