64,682
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<vector<int>> mp;
int dirt[3][2] = { {1,0},{0,-1},{0,1} };
int bfs(int x,int y) {
if (x == m - 1)
return abs(mp[x][y]);
int min = 0;
for (int k = 0; k < 3; k++) {
int i = x + dirt[k][0],
j = y + dirt[k][1];
if (j >= 0 && j < n && mp[i][j]>0 ) {
mp[i][j] *= -1;
int k = bfs(i, j);
if (min == 0 || k < min)
min = k;
mp[i][j] *= -1;
}
}
return abs(mp[x][y]) + min;
}
int main(){
cin >> m >> n;
mp.resize(m, vector(n, 0));
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> mp[i][j];
int min = 0, k;
for (int i = 0; i < n; i++) {
mp[0][i] *= -1; //标记访问
k = bfs(0, i);
mp[0][i] *= -1;
if (min==0||k < min)
min = k;
}
cout << min;
return 0;
}