求助
  • 板块灌水区
  • 楼主Xiaonanu
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/10/13 20:41
  • 上次更新2023/11/2 14:03:53
查看原帖
求助
631943
Xiaonanu楼主2023/10/13 20:41

题面:https://cdn.luogu.com.cn/upload/image_hosting/8mhwigfk.png?x-oss-process=image/resize,m_lfit,h_170,w_225

数据范围:1<=n<=10;1<=a[i][j]<=91<=n<=10;1<=a[i][j]<=9

我的代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
int a[15][15];
int dy[8]={1,1,1,-1,-1,-1,0,0};
int dx[8]={1,-1,0,1,-1,0,1,-1};
int maxn=-1,maxk=-1;
int b[15][15];
string s;
void dfs(int x,int y,int key,int sum)
{
	if(key<=0)
	{
		maxn=max(maxn,sum);
		return;
	}
	for(int i=0;i<8;i++)
	{
		int newx=x+dx[i];
		int newy=y+dy[i];
		if(newx<1)newx=n;
		if(newy<1)newy=n;
		if(newx>n)newx=1;
		if(newy>n)newy=1;
		sum*=10;sum+=a[newx][newy];
		dfs(newx,newy,key-1,sum);
	}
	return;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		for(int j=0;j<n;j++)
		{
			a[i][j+1]=s[j]-'0';
			maxk=max(maxk,a[i][j+1]);
		}
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(a[i][j]==maxk)dfs(i,j,n-1,0);
	cout<<maxn;
	return 0;
}
2023/10/13 20:41
加载中...