10pts 代码求调
查看原帖
10pts 代码求调
598875
nikodo楼主2024/1/1 20:01
#include<bits/stdc++.h>
using namespace std;
int w,h;
char mp[210][80];
int cx[2],cy[2],len=0;
int dis[210][80];
bool vis[210][80];
string s;
void dfs(int x,int y,int cos){
	if(cos==0){
		if(x==0)dfs(x+1,y,1);
		else if(x==h)dfs(x-1,y,1);
		if(y==0)dfs(x,y+1,1);
		else if(y==w)dfs(x,y-1,1);
		return;
	}
	vis[x][y]=1;
	dis[x][y]=cos;
	if(x+2<=h&&!vis[x+2][y]&&cos+1<dis[x+2][y]&&mp[x+1][y]==' ')dfs(x+2,y,cos+1);
	if(x-2>0&&!vis[x-2][y]&&cos+1<dis[x-2][y]&&mp[x-1][y]==' ')dfs(x-2,y,cos+1);
	if(y+2<=w&&!vis[x][y+2]&&cos+1<dis[x][y+2]&&mp[x][y+1]==' ')dfs(x,y+2,cos+1);
	if(y-2>0&&!vis[x][y-2]&&cos+1<dis[x][y-2]&&mp[x][y-1]==' ')dfs(x,y-2,cos+1);
	vis[x][y]=0;
	return;
}
int main(){
	cin>>w>>h;
	w=2*w+1;
	h=2*h+1;
	getline(cin,s);
	for(int i=1;i<=h;i++){
		getline(cin,s);
		for(int j=1;j<=w;j++){
			mp[i][j]=s[j-1];
			dis[i][j]=1000000000;
		}
	}
	for(int i=2;i<=h;i+=2)
		if(mp[i][1]==' '){
			cx[len]=i;
			cy[len++]=1;
		}else if(mp[i][w]==' '){
			cx[len]=i;
			cy[len++]=w;
		}
	for(int i=2;i<=w;i+=2)
		if(mp[1][i]==' '){
			cx[len]=1;
			cy[len++]=i;
		}else if(mp[h][i]==' '){
			cx[len]=h;
			cy[len++]=i;
		}
	dfs(cx[0],cy[0],0);
	dfs(cx[1],cy[1],0);
	int maxn=0;
	for(int i=2;i<h;i+=2)
		for(int j=2;j<w;j+=2)
			maxn=max(maxn,dis[i][j]);
	cout<<maxn;
	return 0;
}
2024/1/1 20:01
加载中...