求助!!!
查看原帖
求助!!!
704634
poor_OIer楼主2022/7/16 20:35
/*
. . . . .
. @ @ @ .
. @ x @ .
. @ @ @ .
. . . . .
*/
#include<bits/stdc++.h>
using namespace std;
int t;
int flag[1005][1005]={0};
int n,m;
int ans=0;
int ma=0;
int c[1005][1005];
int dx[8]={-1,-1,-1,0,1,1,1,0};
int dy[8]={-1,0,1,1,1,0,-1,-1};
int check(int a,int b)
{
	if(a<1||a>n||b<1||b>m)
		return 0;
	return 1;
}
int is_true(int x,int y,int a,int b)
{
	for(int i=0;i<8;i++)
	{
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx==a&&ny==b)
			return 0;
	}
	return 1;
} 
void dfs(int a,int b)
{
	if(a==n)
		return;
	for(int i=0;i<8;i++)
	{
		int nx=a+dx[i];
		int ny=b+dy[i];
		if(check(nx,ny)&&is_true(nx,ny,a,b))
		{
			flag[a][b]=1;
			ans+=c[a][b];
			dfs(nx,ny);
			flag[a][b]=0;
		}
	}
}
int main()
{
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		cin>>n>>m;
		for(int j=1;j<=n;j++)
			for(int k=1;k<=m;k++)
			{
				cin>>c[j][k];
			}
		for(int l=1;l<=n;l++)
			for(int f=1;f<=m;f++)
			{
				memset(flag,0,sizeof(flag));
				dfs(l,f);
				if(ans>ma)
					ma=ans,ans=0;
			}
	}
	cout<<ma;
	return 0;
}
2022/7/16 20:35
加载中...