直接dfs暴力搜
样例:
3 4
9 9 1 1
9 1 1 9
1 1 9 9
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int a[maxn][maxn];
bool q[maxn][maxn] = {false};
int n, m;
int res = 2147483647;
void dfs(int x, int y, int ret)
{
if(x == n - 1)
{
res = min(res,ret);
return;
}
int dx[4] = { -1,0,1,0 }, dy[4] = { 0,1,0,-1 };
for (int i = 0; i < 4; i++)
{
int tx = x + dx[i];
int ty = y + dy[i];
if (tx >= 0 && tx < n && ty >= 0 && ty < m && !q[tx][ty] )
{
ret += a[tx][ty];
q[tx][ty] = true;
dfs(tx, ty, ret);
ret -= a[tx][ty];
q[tx][ty] = false;
}
}
}
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf("%d", &a[i][j]);
}
}
for (int i = 0; i < m; i++)
{
dfs(0,i, a[0][i]);
}
cout << res << endl;
return 0;
}