三面第一题是不是记录上一次走的方向然后深搜就行了🤔 #include <bits/stdc++.h> using namespace std; vector<vector<int>> mp = { {0, 0, 0, 0}, {2, 0, 1, 2}, {0, 0, 2, 0}, {1, 2, 0, 0}}; // 2表示障碍,1表示要消得,0表示没有障碍 int n = 4; int cg = 100; // 拐弯次数 int sx = 1, sy = 2, dx = 3, dy = 0; int d[4][2] = {0, 1, 1, 0, 0, -1, -1, 0}; int vis[4][4]; void dfs(int x, int y, int now, int fx) { // now是已经拐弯的次数,fx是上一次的方向 if (now > 16) return; if (x == dx &;&; y == dy) { cg = min(cg, now); // 更新最小拐弯次数 return; } for (int i = 0; i < 4; i++) { int dx = x + d[i][0], dy = y + d[i][1]; if (dx < 0 || dx >= n || dy < 0 || dy >= n || vis[dx][dy] || mp[dx][dy] == 2) continue; vis[dx][dy] = 1; if (fx == i) dfs(dx, dy, now, fx); else dfs(dx, dy, now + 1, i); vis[dx][dy] = 0; } } int main() { dfs(sx, sy, 0, -1); return 0; }
点赞 3

相关推荐

牛客热帖

更多
牛客网
牛客企业服务