求大佬帮看看,为啥样例输出都是一样的数字
查看原帖
求大佬帮看看,为啥样例输出都是一样的数字
474401
qwe1471900575楼主2021/4/15 13:05
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
int arr[10][10];
int ddd[10][10], u;
int sum, maxx = -11, max;
int n, m;
int work[8][2]{ {0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1} };
int check(int a, int b)
{
	if (a<1 || b<1 || a>n || b>m)
	{
		return -1;
	}
	else
	{
		return 1;
	}
}
void dfs(int a, int b)
{
	if (b == m + 1)
	{
		dfs(a + 1, 1);
		return;
	}
	if (a == n + 1)
	{
		if (sum > maxx)maxx = sum;
		return;
	}
	if (ddd[a][b] == 0)
	{
		sum += arr[a][b];
		for (int i = 0; i < 8; i++)
		{
			int k1 = a + work[i][0];
			int k2 = b + work[i][1];
			ddd[k1][k2] = 1;
		}
	}
	dfs(a, b + 1);
	for (int i = 0; i < 8; i++)
	{
		int k1 = a + work[i][0];
		int k2 = b + work[i][1];
		ddd[k1][k2] = 0;
	}
	sum -= arr[a][b];
}
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		cin >> n >> m;
		memset(ddd, 0, sizeof(ddd));
		memset(arr, 0, sizeof(arr));
		for (int i = 1; i <= n; i++)
		{
			for (int j = 01; j <= m; j++)
			{
				cin >> arr[i][j];
			}
		}
		dfs(1, 1);
		cout << maxx << endl;
	}
	return 0;
}
2021/4/15 13:05
加载中...