review01
#include <iostream> #include <vector> using namespace std; static int x[] = { -1, 0, 1, 0}; static int y[] = { 0, -1, 0, 1}; class Solution{ public: void shortPath(vector<vector<int>>& grap, vector<vector<int>>& used, int target_row, int target_col, bool flag, int i, int j, int steps, vector<int>& ret) { if (i == target_row && j == target_col) { ret.push_back(steps); cout << "arrive:" << steps << endl; return; } // used[i][j] = 1; for (uint8_t k = 0; k < 4; k++) { int newx = i + x[k]; int newy = j + y[k]; if (newx >= 0 && newx < (int)grap.size() && newy >= 0 && newy < (int)grap[0].size() && used[newx][newy] == 0) { used[newx][newy] = 1; if (grap[newx][newy] == 0) { shortPath(grap, used, target_row, target_col, flag, newx, newy, steps + 1, ret); } else if (flag) { flag = false; shortPath(grap, used, target_row, target_col, flag, newx, newy, steps + 1, ret); } used[i][j] = 0; } } } }; int main() { Solution s; vector<vector<int>>grap = { {0, 0, 1, 0}, {0, 0, 0, 0} }; vector<vector<int>>used(grap.size(), vector<int>(0, grap[0].size())); vector<int>ret; s.shortPath(grap, used, 0, 3, true, 0, 0, 0, ret); return 0; }
两个地方,弄了半天。-_-||
used[i][j] = 0; // 这里必须回溯,不然只会遍历一次路径
00
10
11
01
02
12
13
03
arrive:7
正确输出:
00
10
11
01
02
12
13
03
arrive:7
03
arrive:5
12
02
01
03
arrive:5
13
03
arrive:5
01
11
10
12
02
03
arrive:5
13
03
arrive:5
02
12
11
10
13
03
arrive:5
03
arrive:3

浙公网安备 33010602011771号