作为刚学搜索的小孩(初一) 这道题我。。。。。。 诚恳请求各位大佬们帮帮忙啊!
C++代码
#include <bits/stdc++.h>
using namespace std;
int t, n, m, a[100][100], vis[100][100], maxn = -1, sumn;
void dfs(int x, int y)
{
if (y == m + 1)
{
y = 1;
x++;
}
if (x == n + 1)
{
if (sumn > maxn)
maxn = sumn;
return;
}
dfs(x, y + 1);
if (vis[x][y] == 0)
{
sumn += a[x][y];
vis[x - 1][y - 1] = 1;
vis[x - 1][y] = 1;
vis[x - 1][y + 1] = 1;
vis[x][y - 1] = 1;
vis[x][y + 1] = 1;
vis[x + 1][y - 1] = 1;
vis[x + 1][y] = 1;
vis[x + 1][y + 1] = 1;
dfs(x, y + 1);
vis[x - 1][y - 1] = 0;
vis[x - 1][y] = 0;
vis[x - 1][y + 1] = 0;
vis[x][y - 1] = 0;
vis[x][y + 1] = 0;
vis[x + 1][y - 1] = 0;
vis[x + 1][y] = 0;
vis[x + 1][y + 1] = 0;
sumn -= a[x][y];
}
}
int main()
{
cin >> t;
for (int i = 1; i <= t; i++)
{
cin >> n >> m;
memset(a, 0, sizeof(a));
memset(vis, 0, sizeof(vis));
for (int j = 1; j <= n; j++)
{
for (int k = 1; k <= m; k++)
{
cin >> a[j][k];
}
}
dfs(1, 1);
sumn = 0;
cout << maxn << endl;
maxn = -1;
}
return 0;
}
输出答案就有问题,一个点也没过