求助
查看原帖
求助
1060965
fanjiajun_U楼主2024/4/13 17:28
#include<bits/stdc++.h>
using namespace std;
int n,m;
int ans;
int shu[105][105];
int vis[105][105];
int mem[105][105];
int dx[5] = {0,0,0,-1,1};
int dy[5] = {0,-1,1,0,0};
int minn=100050;
int dfs2(int X,int Y,int Step){
	for(int i=1;i<=4;i++){
		int XX=X+dx[i];
		int YY=Y+dy[i];
		//越界 
		if(XX==0&&YY>0&&XX<=n&&YY<=m){
			if(vis[XX][YY]==0){
				Step+=1;
			}
		}else{
			return Step;
		}
	}
}
void dfs(int x,int y,int step){
	if(mem[x][y]!=100050) ans=max(ans,step+mem[x][y]); return ;
	for(int i=1;i<=4;i++){
		//记录方向 
		int xx=x+dx[i];
		int yy=y+dy[i];
		//越界 
		if(xx>0&&yy>0&&xx<=n&&yy<=m){
			//是否已访问 
			if(vis[xx][yy]==0){
				vis[xx][yy]=1;
				mem[xx][yy]=dfs2(xx,yy,0) 
				dfs(xx,yy,step+1);
				vis[xx][yy]=0; 
			}
		}
	}
	return ;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>shu[i][j];
			mem[i][j]=100050;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<n;j++){
			dfs(i,j,1);
		}
	}
	
	return 0;
}

2024/4/13 17:28
加载中...